Ajax更新/呈现不适用于具有呈现属性的组件

Art*_*lev 46 jsf rendered-attribute jsf-2 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're logged in!" rendered="#{not empty user}" />
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.我可以保证这#{user}实际上是可用的.这是怎么造成的,我该如何解决?

Bal*_*usC 92

如果组件本身未在第一时间呈现,则无法通过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>
Run Code Online (Sandbox Code Playgroud)

也可以看看: