猿问

AJAX更新/呈现不适用于已呈现属性的组件

AJAX更新/呈现不适用于已呈现属性的组件

我正在尝试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}实际上是可用的。这是如何造成的,我如何解决呢?


慕哥9229398
浏览 426回答 1
1回答

MMTTMM

如果组件本身不首先呈现,则不可能通过Ajax重新呈现(更新)组件。在Ajax重新呈现组件之前,必须始终呈现组件。AJAX正在使用JavaScriptdocument.getElementById()若要查找需要更新的组件,请执行以下操作。但是,如果JSF没有首先呈现组件,那么JavaScript就找不到任何要更新的内容。解决方案是简单地引用始终呈现的父组件。<h:form> &nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;<h:commandButton&nbsp;...> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<f:ajax&nbsp;...&nbsp;render=":text"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;</h:commandButton></h:form><h:panelGroup&nbsp;id="text"> &nbsp;&nbsp;&nbsp;&nbsp;<h:outputText&nbsp;...&nbsp;rendered="#{not&nbsp;empty&nbsp;user}"&nbsp;/></h:panelGroup>另见:当我想要Ajax更新一个组件时,为什么我需要在另一个组件中嵌套一个呈现=“#{一些}”的组件?如何为Ajax更新/呈现查找组件的客户端ID?找不到表达式“foo”从“bar”引用的组件
随时随地看视频慕课网APP
我要回答