我写了以下非常简单的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
我做错了什么?
答案 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']}" />
答案 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。