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
Jsf Ajax更新/渲染在具有渲染属性的组件上不起作用_Jsf_Jsf 2_Rendered Attribute_Conditional Rendering_Ajax Update - Fatal编程技术网

Jsf Ajax更新/渲染在具有渲染属性的组件上不起作用

Jsf Ajax更新/渲染在具有渲染属性的组件上不起作用,jsf,jsf-2,rendered-attribute,conditional-rendering,ajax-update,Jsf,Jsf 2,Rendered Attribute,Conditional Rendering,Ajax Update,我正在尝试ajax更新一个有条件呈现的组件 <h:form> ... <h:commandButton value="Login" action="#{login.submit}"> <f:ajax execute="@form" render=":text" /> </h:commandButton> </h:form> <h:outputText id="text" value="You

我正在尝试ajax更新一个有条件呈现的组件

<h:form>
    ...
    <h:commandButton value="Login" action="#{login.submit}">
        <f:ajax execute="@form" render=":text" />
    </h:commandButton>
</h:form>
<h:outputText id="text" value="You're logged in!" rendered="#{not empty user}" />

...

然而,这是行不通的。我可以保证
{user}
实际上是可用的。这是如何造成的,我如何解决它?

如果组件本身没有首先呈现,那么ajax就不可能重新呈现(更新)组件。在ajax重新呈现组件之前,必须始终呈现该组件。Ajax使用JavaScript
document.getElementById()
查找需要更新的组件。但是如果JSF没有首先呈现组件,那么JavaScript就找不到任何要更新的内容

解决方案是简单地引用始终呈现的父组件

<h:form>
    ...
    <h:commandButton ...>
        <f:ajax ... render=":text" />
    </h:commandButton>
</h:form>
<h:panelGroup id="text">
    <h:outputText ... rendered="#{not empty user}" />
</h:panelGroup>

...
另见:

bean不应该至少具有ViewScope或更好的SessionScope吗?但是容器不会打印任何异常跟踪。通常在找不到id的情况下-它会打印出在作用域中找不到这样的id。那么,登录名就是无效的:)这将是一个完美的解释:)但是持久性提供程序找到了它-我检查了代码)@TREMOR:冒号是当前形式代码的正确解决方案。显然,您有一个不同的构造,其中所有内容都放在同一个命名容器组件中。查看最后一个“请参阅”链接,了解如何确定正确的客户端ID。