質問

私は私がクリックされた、チェックボックスを持っているしたい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 &amp;&amp; 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 &amp;&amp; backingBean.showComponentToReRender}">
       <s:selectItems value="#{valuesList}" var="value"/>
    </h:selectOneMenu>
</h:panelGroup>

あなたがreRender="componentToReRenderWrapper"を使用する場合にpanelGroupを変更、またはあなたがoutputPanelを使用する場合には、その属性を削除します。

RichFacesの文書ます:

  

再レンダリングを使用しての最も一般的な問題は、「レンダリング」属性を持つコンポーネントにそれを指しています。 JSFコンポーネントの結果が「レンダリング」の条件がfalseを返した場合に配置する必要があり、ブラウザDOMに場所をマークしていないことに、注意してください。したがって、コンポーネントは、Ajaxリクエストの際にレンダリングになった後、RichFacesのは、クライアントにレンダリングされたコードを提供しますが、更新のための場所が不明であるため、ページを更新しません。あなたは何の「レンダリング」属性を持たない親コンポーネントの一つを指すようにする必要があります。別の方法として、あなたはレイアウト=「なし」を持つコンポーネントをラップすることができます。

他のヒント

a4jにajaxRendered = "true" に設定することを忘れないでください:outputPanel

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top