4

WebSphere Application Server 8 の ApacheMyfaces で Primefaces 3.2 を使用しています。

内部に ajax 更新を含む selectOneButton があります。ボタンを切り替えると、セッターは最初に値 (int) を 0 に設定し、次に選択した値に設定します。

<p:selectOneButton value="#{graph.view}" id="view">
    <f:selectItem itemLabel="W" itemValue="1" />
    <f:selectItem itemLabel="M" itemValue="2" />
    <f:selectItem itemLabel="Y" itemValue="3" />
    <p:ajax event="change" update=":optform:datecol"/>
</p:selectOneButton>

datecol は、フォーム (optform) 内の別の selectComponent です。

JSF が最初に値を 0 に設定し、次に 2 に設定するのはなぜですか?

解決 策 これは PrimeFaces selectOneButton のバグです。ここで私の質問を参照してください。

宜しくお願いします

4

1 に答える 1

2

おそらく、マネージド Beangraphは JSF ライフサイクルの早い段階でインスタンス化されており、APPLY_REQUEST_VALUESフェーズの後半になって初めてマネージド プロパティに適切な値が設定されますview。マネージド Bean はスコープに関係なく、Web の本質的にステートレスな性質により、各リクエストの後に再インスタンス化されます。

詳細については、BalusC の JSF ライフサイクルのデバッグに関する優れた記事があり、アプリケーションでこのような動作を理解してデバッグするのに役立つカスタム PhaseListener を実装する方法について段階的に説明しています。

http://balusc.blogspot.com/2006/09/debug-jsf-lifecycle.html

于 2012-07-16T12:29:23.453 に答える