2014-01-19 3 views
-1

печати я написал следующее, очень простой JSF страницы:<ч: outputText значение = "# {nameController.name}" /> ничего не

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://xmlns.jcp.org/jsf/html" 
     xmlns:f="http://xmlns.jcp.org/jsf/core"> 
    <f:metadata> 
     <f:viewParam name="name" value="#{nameController.name}" /> 
    </f:metadata> 

    <h:head> 
     <title>Hello, <h:outputText value="#{nameController.name}" /></title> 
    </h:head> 
    <h:body> 
     Hello, <h:outputText value="#{nameController.name}" /> 
    </h:body> 
</html> 

name свойство nameController это просто переменная экземпляра с геттером и сеттер.

Однако, когда я иду на страницу http://localhost:8080/NameThing/name.xhtml?name=tbodt (и это правильный путь к странице) я получаю этот результат:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"><head id="j_idt3"> 
     <title>Hello, </title></head><body> 
     Hello, </body> 
</html> 

Что я делаю неправильно?

+2

Место точки разрыва в геттере и проверить, является ли имя нулевым? Если это так, проблема не в коде, который вы нам показываете ... – meriton

+0

Каково ожидаемое значение nameController.name? – EJP

+0

@EJP Как вы можете сказать, просмотрев код, это то, что передается как параметр GET «name». – tbodt

ответ

0

Выяснил это. Оказывается, это ошибка в JSF 2.2. <f:viewParam> не работает с новым пространством имен. В качестве обходного пути, я изменил пространства имен это:

<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://xmlns.jcp.org/jsf/html" 
     xmlns:f="http://xmlns.jcp.org/jsf/core" 
     xmlns:oldf="http://java.sun.com/jsf/core"> 

Затем я использую <oldf:metadata> и <oldf:viewParam>.

-2

Вы используете пространства имен JSF 2.2 xml и, очевидно, не имеете среды (возможно, сервера приложений), которая поддерживает JSF 2.2.

Если вы хотите использовать «старый» JSF 2 вы должны использовать эти объявления пространства имен:

<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:f="http://java.sun.com/jsf/core"  
     xmlns:h="http://java.sun.com/jsf/html"> 

Если вы хотите использовать JSF 2.2 вы должны обновить сервер приложений для поддержки JSF 2.2.

+2

Если у него не было JSF 2.2, он бы увидел нераскрытые теги JSF в сгенерированном HTML-выходе. Однако он получил '' и '' вместо '' и '' и '' правильно удален, это просто '# {nameController.name}', который ничего не возвращал. – BalusC

+0

Я использую GlassFish 4. Это невозможно. – tbodt

+0

Изменение пространства имен на то, что @unwichtich предлагает решить проблему! Просто попробовал это без каких-либо изменений! Поэтому настройка tbodt должна быть неправильной! –

-1

Как вы объявили свой класс NameController?

Когда вы пишете

<h:outputText value="#{nameController.name}" /> 

он должен связываться с именем свойства боба NameController присутствующего в рамках страницы.

So NameController должен быть управляемым компонентом.

@ManagedBean 
@SessionScoped // or RequestScoped, ApplicationScoped, etc.. (depending 
       // on how you want your bean to bean managed 
public class NameController{ 
// contructors 
// properties 
// getter and setter  
} 
+0

Мой bean точно такой же, кроме как с '@ Named' вместо' @ ManagedBean', а '@ SessionScope' также от CDI. – tbodt

+0

Таким образом, проблема может заключаться в том, что вы не помещаете какие-либо данные в экземпляр NameController. Попробуйте установить некоторые немые значения в конструкторе, и вы сможете увидеть sth. – user3173787

0

Вы пытаетесь передать "имя" по URL

http://localhost:8080/NameThing/name.xhtml?name=tbodt. 

Это Dont установить свойство имени.

Если вам нужно установить свое свойство «имя» по URL-адресу, у вас есть много WA, которое вы можете сделать.

1) Используйте javascript для того, чтобы установить свою собственность, такую ​​как BlusC, в его блоге. Pass variable from client side to server side

2) с использованием <h:outputText value="#{param['name']}" />

Как этот пост: https://stackoverflow.com/a/550718/3056912

-1

Если вы используете JBoss Weld для CDI, убедитесь, что вы добавили аннотацию @model или еще лучше конкретную @Named аннотацию.

Чтобы сузить проблему и провести различие между проблемой параметра страницы и проблемой именования, добавьте фиксированную строку в ваш компонент (с помощью геттеров) и напишите его на странице.

Если строка появляется Свыми вопросы параметров страницы, если он не появится, его боб именование/связывание вопрос

-1

проверить Managed боба ли переменная «имя» класса начинается с верхним регистром или нижним регистром.Если он заглавными, введите его в нижнем регистре и снова создайте свой приемник и сеттеры и попробуйте снова!

Смежные вопросы