2

重複の可能性:
カスタム コンポーネント アクション リスナーの Primefaces commandButton が呼び出されない

を拡張するカスタム コンポーネントを作成しましたUIComponentBaseencodeBegin( CommandButtonPrimefaces から) でいくつかのコンポーネントを作成していますdecodeが、ボタンを探しているときにユーザーがボタンをクリックしてトリガーされた場合、それは存在せずUIViewRoot、存在しませんthis.getChildren()

トリガーされ、コンポーネントが存在しないときに呼び出されるコンポーネントの新しいインスタンスのようですdecode。なにが問題ですか?

いくつかのコードは次のとおりです: code

必要に応じて、コード全体を送信できます。


この手法は PrimeFaces やその他のソフトウェアで使用されていることがわかりましたが、getStateHelper().eval("someKey"); から値を取得する理由を説明できますか? デコードでは常に null ですか?

おそらく私のサイトの問題ですが、解決できませんか?

これは私が始めたスレッドへのリンクです:

問題の詳細な説明

4

1 に答える 1

1

デコードがトリガーされ、コンポーネントが存在しないときに呼び出されるコンポーネントの新しいインスタンスのようです。

そのとおりです。コンポーネント インスタンスはビュー ステートに格納されません。代わりに、コンポーネントの状態がビューステートに保存されます。StateHelperコンポーネントの状態は、で使用できるヘルパー クラスによって管理できますUIComponent#getStateHelper()

したがって、エンコード中に次のことを行います。

// ...
getStateHelper().put("someKey", someKey);

そして、デコード中に次のことを行います:

SomeKey someKey = (SomeKey) getStateHelper().eval("someKey");
// ...

以下も参照してください。

于 2013-01-07T12:04:37.100 に答える