LoginSignup
1
1

More than 5 years have passed since last update.

JSF2.2 + Spring3.0 でカスタムViewScopeの同一画面判別方法

Posted at

以前アメブロで公開した内容です。

JSF2.2 + Spring3.0の環境でViewScopeを使えるようにしてみました。
カスタムスコープを使用しています。

カスタムスコープの作成方法はこちらの記事を参考にさせて頂きました。
http://jarngreipr.blog106.fc2.com/blog-entry-7.html

こちらの記事通りの方法でViewScope自体は使えるようになるのですが、実際どういった時に「同一画面」と捉えれるのか?がよくわからなかったので、いろいろと試してみました。

何をもってして別画面と判断するのか?

viewIdというものを使用して判別しています。
JSF側で自動管理されているパラメータになります。
この値が変更されると、別の画面に変わったという判断になるようです。

GET遷移の場合

h:linkh:buttonを使用した場合などのGET遷移の場合は常にviewIdが切り替わるようで、かならず別画面であるという判定が行われます。
まあ、これは想定内ですね。

POST遷移の場合

h:commandLinkh:commandButtonなどでPOST遷移する場合。
ここ、ちょっと躓きましたが、結果以下のような形でした。

遷移先Actionの戻り値がvoidの場合

viewIdの変更なし

遷移先Actionの戻り値がStringの場合

Stringの内容によって変動
- return null   viewIdの変更なし
- return outcome   viewIdの変更あり

まとめ

結論としては、ViewScope範囲内で画面再表示を実施したい場合は、かならずPOST遷移を使用し、値をnullで返却する、という形で収まりました。
よく考えれば当たり前のことな気はしますね・・・

ちなみに、似たような話でf:viewActionの「画面を初回表示した際にのみ」実施されるという「初回」の判断は何をもってしているのか?というのも調べたところ、こちらは完全にGET遷移かPOST遷移かだけで判断しているようです。
なので、 return outcomeで別ページから遷移してきても、実行されません。
カスタムViewScopeとf:viewActionを併用する場合は、このあたり気を付けて実装する必要があると思われます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1