Jsf Ajax更新/渲染在具有渲染属性的组件上不起作用
我正在尝试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
<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使用JavaScriptdocument.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>
...
另见: