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>