上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

役に立ったらぽちっとよろしく。 人気ブログランキングへ

昔の JSF、JSF1.2 の頃には、@ViewScoped がまだなく、おいらは同じ機能を自作してた。無かったのが不思議な位の機能なので、たぶん同じ事をしていた人も多いはず。で、ViewScoped がせっかく導入されたので、全部置き換えた。さよなら my code (涙)。。。

…けど、何か変。何故か c:if (JSTL) の test 属性の EL 式にビュースコープのマネージドビーンがあると、ポストバック時にも関わらず、新規作成される。…ぬ~、おいらは最近よく地雷を踏む、もしや、と思いまた検索してみると、Mojarra (GlassFish 同梱の JSF の参照実装) のバグだった。

で、どんなバグかと言うと、まず、Facelets で Partial State Saving が有効な場合に発生する。そして、ビューの再構築時に EL 式の評価が必要な属性で発生する。JSTL の属性や binding 属性がこれに該当する。例えば、c:if の test 属性は Restore View フェーズで動作し、下位コンポーネントの有無を決める。一方、JSF の rendered 属性はコンポーネントの表示の有無に関わるだけで、コンポーネントの有無自体には関わらない。そして、Partial State Saving の場合、ビューステートはテンプレートとの差分で保存されているので、復元時に最初にテンプレートを適用する構造上どうしても、一部の属性の評価がビュースコープのマネージドビーンの再構築より先に動いてしまう。結果、それらのビュースコープのマネージドビーンが、"無いので最初から作成します" という事になる。

しかし、最近本当によく地雷を踏んでしまう。まぁ、比較的新しい機能にすぐ飛びつくおいらの性格も悪いのだけど…。新機能を使って安全かどうかを確認するのに、プロジェクト毎の生還率 (バグに遭遇しなかった割合) を書いてて欲しい…と思った。で、本物の地雷原みたくドクロマークで表すとか。…ぬぉぉ~!周り全部ドクロマークじゃん!おぃおぃどうやって入ったんだよ!パラシュート部隊なんだよ俺は!!って事にならんように新技術の採用は慎重に、笑。

役に立ったらぽちっとよろしく。 人気ブログランキングへ

スポンサーサイト
Copyright © ふらふら技術者の日記 All Rights Reserved.
Powered by FC2 Blog
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。