Java <;h:outputText值=“#{nameController.name}"/&燃气轮机;不';不要打印任何东西
我已经编写了以下非常简单的JSF页面:Java <;h:outputText值=“#{nameController.name}"/&燃气轮机;不';不要打印任何东西,java,jsf,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" xmln
<?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>
我做错了什么?您使用的是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">
如果你想使用JSF2.2,你必须更新你的应用服务器以支持JSF2.2。你是如何声明你的NameController类的 当你写作时
<h:outputText value="#{nameController.name}" />
您正试图通过url传递“名称”
这不会设置您的名称属性
如果你需要通过url设置你的“name”属性,你可以做很多事情
1) 使用javascript设置您的属性,如博客中的BlusC描述。
2) 使用
如本文所示:如果您使用JBoss Weld for CDI,请确保您添加了@Model注释,或者更好的是添加了特定的@Named注释 要缩小问题范围并区分页面参数问题和命名问题,请向bean中添加一个固定字符串(使用getter)并将其写入页面
如果字符串显示为其a页面参数问题,如果未显示,则为bean命名/绑定问题检查托管bean类变量“name”是以大写还是小写开头。如果它是大写的,请将其改为小写,然后再次创建getter和setter,然后重试 找到了答案。这是JSF2.2中的一个bug<代码>不适用于新命名空间。作为解决方法,我将名称空间更改为:
<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">
然后我使用
和
在getter中放置一个断点,并检查name是否为null?如果是这样的话,问题不在您展示给我们的代码中…nameController.name的预期值是多少?为什么要将我的编辑回滚到snarky版本?不管您最初的态度如何,赏金都足以发布答案,但回滚阻止了我发布答案。#{nameController.name}返回空字符串(或null)。你确定调用了setter吗?再次修复了你的标题。仅仅在标题中重复你的假设是不会有任何结果的,更精确的标题会得到更精确的答案@请注意,如果他没有JSF2.2,他会在生成的HTML输出中看到未解析的JSF标记。然而,他得到了
和
而不是
和
,
被正确删除了,只是{nameController.name}
没有返回任何内容。我使用的是GlassFish 4。这是不可能的。将名称空间更改为@unwichtich建议的名称空间可以解决问题!只是尝试了一下,没有其他改变!所以tbodt的设置一定是错误的@MartinHöller这是一个JSF bug。我的bean与之完全相同,只是使用了@Named
而不是@ManagedBean
,并且@SessionScope
也是来自CDI。所以问题可能是您没有在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
}
http://localhost:8080/NameThing/name.xhtml?name=tbodt.
<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">