- PR -

JSFの警告について

投稿者投稿内容
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2006-05-25 08:59
引用:

結論から申し上げると、トマホークのpanelStackを使用した場合に分岐で処理されなかった
と思っていた部分に記述されていたUIコンポーネントもバックエンドでは存在しており、
そのコンポーネントに対する値がサブミット時に渡されなかったのが原因のようです。
従いまして、UIコンポーネントのrenderedを明示的にfalseと指定してやることで現象が
解決しました。


不可解ですね.もしそれがpanelStackの仕様だとしたら,panelStackなど使う必要が無く
自分でrenderedを指定して,表示したりしなかったり制御すれば良いことになりませんかね.
TAKEZO
ベテラン
会議室デビュー日: 2003/12/25
投稿数: 59
投稿日時: 2006-05-25 22:57
ちょっと説明が足りなかったようです。renderedプロパティをfalseにする必要があるのは
input系のコンポーネントだけです。おそらく、UIコンポーネントツリーが復元された後の
リクエストから入力値を取得するフェーズで、UIコンポーネントツリーにはコンポーネントが
あるのに、リクエストから入力値が取得できないというのが問題になっているのではないかと
推測しています。

従って、input系のコンポーネント以外なら問題なく使えますので意外と使い勝手は良いかと
思いました。但し、少し不親切だなぁとも。。。
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2006-05-26 13:33
この際なので,少し詳しく説明します.
表示されなくてもコンポーネントは原則としてすべてサーバ側で復元されます.
rendered="false"でも.実は<!-- -->でコメントアウトされているものも.

Apply Request Valueフェーズでは,コンポーネントツリーのルートから
processDecodesというメソッドがツリートラバースをして,各コンポーネントの
decodeメソッドを起動します.ただしもしrenderedプロパティがfalseならば
それ以上深くはツリートラバースをやりません.
ですからFormやPanelGridでrendered="false"であれば,その子コンポーネントは
処理しない仕組みになっています
(以上はUIComponentのprocessDecodesのjavadocに書いてあります)

ですから,PanelStackのprocessDecodesは当然,現在表示しているPanelだけを
トラバースすべきだと思うのですが,TAKEZOさんが遭遇している現象から見て
そうではないようなので,不可解だなと思うわけです.
TAKEZO
ベテラン
会議室デビュー日: 2003/12/25
投稿数: 59
投稿日時: 2006-05-29 13:12
よしだ様、説明有り難うございます。実はその辺りの知識について曖昧な部分が多く
大変参考になりました。また、panelStackですが結局利用するのをやめ、form要素の
renderedで対応することにしました。ご指摘の通りpanelStackの利用用途は何を
想定しているんだろうなぁ?という感じですね。
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2006-05-29 14:09
引用:

よしだ様、説明有り難うございます。実はその辺りの知識について曖昧な部分が多く


宣伝になるので恐縮ですが,私の本ではシーケンス図で説明してありますので,
まぁ,立ち読みでもして下さい.

スキルアップ/キャリアアップ(JOB@IT)