<h:outputtext value =“#{nameController.name}”>不打印任何内容</h:outputtext>

时间:2014-01-19 21:59:38

标签: java jsf

我写了以下非常简单的JSF页面:

<?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的{​​{1}}属性只是一个带有getter和setter的实例变量。

然而,当我转到页面nameController(这是该页面的正确路径)时,我得到了这个结果:

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

我做错了什么?

6 个答案:

答案 0 :(得分:0)

您正尝试通过网址传递“名称”

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

这不要设置你的名字属性。

如果您需要通过网址设置“name”属性,那么您可以使用很多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 :(得分: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 :(得分:-1)

你是如何宣布你的NameController类的?

写作时

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

它应该绑定到页面范围内存在的bean NameController的属性名。

所以NameController应该是一个托管bean。

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

答案 3 :(得分:-1)

如果您使用JBoss Weld进行CDI,请确保添加了@Model注释或更好的@Named注释。

要缩小问题范围并区分页面参数问题和命名问题,请在bean中添加固定字符串(使用getter)并将其写入页面。

如果字符串显示其页面参数问题,如果它没有显示,则是一个bean命名/绑定问题

答案 4 :(得分:-1)

检查您的Managed bean是否类变量'name'以大写或小写开头。如果它是大写的,请将其设为小写并再次创建你的getter和setter并再次尝试!!!

答案 5 :(得分:-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。