0

ValueChange リスナーと Renderresponse フェーズに関して 2 つの質問があります。

  1. valueChangelistener は、次のコードで更新された値を反映していません。

ページ Bean コード:

    public void changeListernMethod(ValueChangeEvent e) {
       setUpdatedCountry("You selected " + e.getNewValue().toString());
       FacesContext.getCurrentInstance().renderResponse();        
    }

Valuechange メソッドは PROCESS VALIDATION フェーズで呼び出され、UPDATE MODEL フェーズは valuechange イベント メソッドで設定された値を上書きするため、レンダリング レスポンス フェーズにスキップするように valuechange メソッドに行を追加しました。

 FacesContext.getCurrentInstance().renderResponse();

ただし、ドロップダウンで任意の値を選択すると、選択した値がテキスト ボックスに反映されません。これがライフサイクルに関係していることは知っていますが、それが何であるかを理解できませんでした。

  1. レンダリング フェーズでは、コンポーネントの値が ManagedPageBean またはコンポーネント ツリー (UIViewRoot) から読み込まれ、ブラウザに表示されます。

BaluSc の投稿 - http://balusc.blogspot.in/2006/09/debug-jsf-lifecycle.htmlから、「表示される値は、バッキング Bean の値バインディング ゲッターから取得されます」が RenderResponse に表示されます。値が Bean から読み取られることを意味します。その場合、値が UIRootView に更新されて、ポストバック要求のためにビューを元に戻す方法/時期。

以下のxhtmlコード...

 <h:selectOneMenu value="#{changeListenerBean.country}" onchange="submit()"            
valueChangeListener="#changeListenerBean.changeListernMethod}" >
                    <f:selectItems value="#{changeListenerBean.countries}" />
                </h:selectOneMenu>
    <h:inputText value="#{changeListenerBean.updatedCountry}" />
4

0 に答える 0