Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java <;h:outputText值=“#{nameController.name}"/&燃气轮机;不';不要打印任何东西_Java_Jsf - Fatal编程技术网

Java <;h:outputText值=“#{nameController.name}"/&燃气轮机;不';不要打印任何东西

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

我已经编写了以下非常简单的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>

我做错了什么?

您使用的是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">