12

こんにちは、ページ内のコンポーネントを条件付きでレンダリングする次のコードがあります。

<h:commandButton action="#{Bean.method()}"  value="Submit">
   <f:ajax execute="something" render="one two" />
</h:commandButton>

<p><h:outputFormat rendered="#{Bean.answer=='one'}" id="one" value="#{messages.one}"/></p>
<p><h:outputFormat rendered="#{Bean.answer=='two'}" id="two" value="#{messages.two}"/></p>

答えを取得してコンポーネントをレンダリングしますが、それをページに表示するには、ページを更新する必要があります。この問題を解決するにはどうすればよいですか? 助言がありますか?

4

3 に答える 3

19

JSF コンポーネントのrendered属性は、JSF が目的の HTML を生成するかどうかを制御するサーバー側の設定です。

<f:ajax>タグの属性は、JavaScript がajax 要求の完了時にコンテンツを置き換えるために HTML DOM ツリーからrender取得できる、JSF によって生成された HTML 要素の (相対) クライアント ID を指す必要があります。document.getElementById()

ただし、( であるため) JSF によってレンダリングされることのない HTML 要素のクライアント ID を指定してrenderedいるためfalse、JavaScript は HTML DOM ツリーでそれを見つけることができません。

常にレンダリングされるため、常にHTML DOM ツリーで使用できるコンテナー コンポーネントにラップする必要があります。

<h:commandButton action="#{Bean.method()}"  value="Submit">
   <f:ajax execute="something" render="messages" />
</h:commandButton>

<p>
    <h:panelGroup id="messages">
        <h:outputFormat rendered="#{Bean.answer=='one'}" value="#{messages.one}"/>
        <h:outputFormat rendered="#{Bean.answer=='two'}" value="#{messages.two}"/>
    </h:panelGroup>
</p>

具体的な問題とは関係ありませんが、設計ミスの可能性があります。代わりに、アクションメソッドで目的のメッセージを設定してプロパティを作成しない#{Bean.message}ので、次を使用できます。

<h:commandButton action="#{Bean.method()}"  value="Submit">
   <f:ajax execute="something" render="message" />
</h:commandButton>

<p>
    <h:outputFormat id="message" value="#{Bean.message}" />
</p>
于 2012-04-30T19:11:06.473 に答える
-1
style="visibility: #{questionchoose.show==false ? 'hidden' : 'visible'}"
于 2013-04-16T09:13:22.233 に答える