selectBooleanCheckboxとJSF再度レンダリングのサポート
質問
私は私がクリックされた、チェックボックスを持っているしたいJSFページを持って、ページから特定の他のフォームフィールドを追加/削除します。ここで私は現在、チェックボックスを持っている(簡体字)のコードです:
<h:selectBooleanCheckbox title="showComponentToReRender" value="#{backingBean.showComponentToReRender}">
<a4j:support event="onsubmit" reRender="componentToReRender" />
</h:selectBooleanCheckbox>
ここでは、私が非表示にするコンポーネントのコードです
<h:selectOneMenu id="componentToReRender" value="#{backingBean.value}" rendered="#{valuesList.rowCount>1 && backingBean.showComponentToReRender}">
<s:selectItems value="#{valuesList}" var="value"/>
</h:selectOneMenu>
現在、チェックボックスをクリックすると、何もしません。ことは、「selectOneMenuは」離れて行くことはありません。私が間違って何をしているのですか?
解決
あなたはどちらかにcomponentToReRender
をラップする必要があります:
<h:panelGroup id="componentToReRenderWrapper">
または
<a4j:outputPanel id="componentToReRenderWrapper">
だから、効果的にあなたが持っているでしょう。
<h:panelGroup id="componentToReRenderWrapper">
<h:selectOneMenu id="componentToReRender" value="#{backingBean.value}" rendered="#{valuesList.rowCount>1 && backingBean.showComponentToReRender}">
<s:selectItems value="#{valuesList}" var="value"/>
</h:selectOneMenu>
</h:panelGroup>
あなたがreRender="componentToReRenderWrapper"
を使用する場合にpanelGroup
を変更、またはあなたがoutputPanel
を使用する場合には、その属性を削除します。
再レンダリングを使用しての最も一般的な問題は、「レンダリング」属性を持つコンポーネントにそれを指しています。 JSFコンポーネントの結果が「レンダリング」の条件がfalseを返した場合に配置する必要があり、ブラウザDOMに場所をマークしていないことに、注意してください。したがって、コンポーネントは、Ajaxリクエストの際にレンダリングになった後、RichFacesのは、クライアントにレンダリングされたコードを提供しますが、更新のための場所が不明であるため、ページを更新しません。あなたは何の「レンダリング」属性を持たない親コンポーネントの一つを指すようにする必要があります。別の方法として、あなたはレイアウト=「なし」を持つコンポーネントをラップすることができます。
他のヒント
a4jにajaxRendered = "true" に設定することを忘れないでください:outputPanel