57

条件付きでレンダリングされたコンポーネントをajax-updateしようとしています。

<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 に答える