ValueChange リスナーと Renderresponse フェーズに関して 2 つの質問があります。
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();
ただし、ドロップダウンで任意の値を選択すると、選択した値がテキスト ボックスに反映されません。これがライフサイクルに関係していることは知っていますが、それが何であるかを理解できませんでした。
- レンダリング フェーズでは、コンポーネントの値が 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}" />