2009-07-10 11 views
6

a4jリンク/ボタンがアクションを実行した後にRichFacesコンポーネントを再レンダリングすることについて、私は少しのハードルを助けてくれることを願っています。次のように私の問題の単純化されたバージョンは次のとおりです。a4jリンクが呼び出された後にRichFacesコンポーネントを再レンダリングする方法

私は私のマネージャークラスのいくつかの値に基づいてレンダリングされたテキスト値を表示する2つの出力コンポーネントがあります。

<h:outputText id="on" value="ON" rendered="#{manager.isOn}" /> 

<h:outputText id="off" value="OFF" rendered="#{not manager.isOn}" /> 

を私も呼んで2つのa4jリンクを持っていますいくつかのアクションその後、再描画上記のoutputTextコンポーネント:

<a4j:commandLink ajaxSingle="true" value="Set On" action="#{manager.setOn(true)}" reRender="on,off" /> 

<a4j:commandLink ajaxSingle="true" value="Set Off" action="#{manager.setOn(false)}" reRender="on,off" /> 

私は、私はボタン「で設定します」をクリックしたときに、「ON」outputTextコンポーネントを再表示しますされて起こることを期待し、「OFFだろうかoutputTextコンポーネントが表示されます。しかし、これは起こりません。

これがなぜそうであるか、そしてa4jコンポーネントのアクションが完了した後、これらのコンポーネントを再レンダリングする方法について、誰かが答えを持っていますか?

答えて

11

ラップs:divと再描画次のようにその中outputTextコンポーネント:オフと上のoutputText要素のロード時にレンダリングされません:私はあなたの時間があるとし

<s:div id="myDiv"> 
    <h:outputText id="on" value="ON" rendered="#{manager.isOn}" /> 

    <h:outputText id="off" value="OFF" rendered="#{not manager.isOn}" /> 
</s:div> 

<a4j:commandLink ajaxSingle="true" value="Set On" 
    action="#{manager.setOn(true)}" reRender="myDiv" /> 

<a4j:commandLink ajaxSingle="true" value="Set Off" 
    action="#{manager.setOn(false)}" reRender="myDiv" /> 
0

ページ。

RichFacesのはをレンダリングの値がに変更した場合でも、これらのコンポーネント後で再度レンダリングしません。

1

親を再レンダーします。それはSeamタグである必要はありません。

3

私は遺伝子に同意するが、私は見つけることができる最良の方法は、例えば

<a4j:outputpanel id="whatever_id" />

でコンテンツを囲むようにある

<a4j:outputpanel id="myDiv"> 
    <h:outputText id="on" value="ON" rendered="#{manager.isOn}" /> 
    <h:outputText id="off" value="OFF" rendered="#{not manager.isOn}" /> 
</a4j:outputpanel>