2

標準の Seam Identity (これもセッションスコープ) をオーバーライドする Seam セッションスコープのコンポーネント CustomIdentity があります。拡張された CustomIdentity にはプロパティがあります

@Out(required=false, scope=ScopeType.SESSION)private User user

オーバーライドされた login() で、HttpServletRequest のプリンシパルからの情報を取り込んだ User オブジェクトを定義します。アプリケーションの最初のリクエストで、User オブジェクトは SESSION スコープで期待どおりにアウトジェクトされます。ただし、2 番目のリクエストでは、User オブジェクトがセッションから消失しており、それを注入するページにアクセスすると、例外が発生します。

私の質問は、コンポーネントが正確にいつ排出されるかです。

  • CustomIdentity コンポーネントのすべてのメソッドの後に (の参照が含まれていなくてもuser)?
  • User コンポーネントの参照を含む各メソッドの後?

そしてrequired属性について:

  • アウトジェクト時に User オブジェクトが と評価された場合null、すでにアウトジェクトされたユーザーはセッション スコープから削除されますか?

乾杯!

4

1 に答える 1

3

あなたの最初の質問に: コンポーネントは、のすべてのメソッドの後に oujected ですCustomIdentity。対応する Seam ソースコードorg.jboss.seam.core.BijectionInterceptor(Seam 2.2.0) を見てください。バイジェクションは、コンポーネント、つまりクラス、レベルで行われます。

2 番目の質問: リクエストが終了するたびCustomIdentityに、フィールドの値がアウトジェクトされます。outjection プロパティを使用するrequire=falseuser、セッション コンテキストで現在 outject されている が によってオーバーライドされる可能性がありますnull

于 2010-10-17T20:49:11.957 に答える