57

我正在尝试对有条件渲染的组件进行 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}实际上是可用的。这是如何引起的,我该如何解决?

4

1 回答 1

106

如果组件本身未首先呈现,则无法通过 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>

也可以看看:

于 2013-02-09T20:04:26.237 回答