1

私たちのアプリケーションの1つには、2つのクラスのユーザーがいます。

  1. 内部ユーザー(class InternalUser extends User
  2. 外部ユーザー(class ExternalUser extends User

これらをセッションスコープのマネージドBeanとして使用しています(基本的に、ログインしたユーザーの詳細を挿入します。これには、class User上記の2つのクラスのそれぞれにいくつかの共通の詳細といくつかの特定の詳細があります)。

両方の管理対象Bean(ここでは " loggedInUser")に同じ名前を付けることはできますか?

Facesは例外をスローしています。「'loggedInUser'という名前のマネージドBeanはすでに登録されています。既存のマネージドBeanクラスを置き換えています...

このシナリオをどのように管理できますか?

4

2 に答える 2

2

1 つの方法は、JSF マネージド Bean にしないことです。ログイン フォームに関連付けられた Bean をリクエスト/ビュー スコープのものにし、Userインスタンスを自分でセッション スコープに配置します。

例えば

User user = service.find(username, password);

if (user != null) {
    externalContext.getSessionMap().put("user", user);
}

ELスコープで利用可能になります(したがって、正確にその式で他のBeanを#{user}介して注入することもできます)。@ManagedPropertyメソッドでは、どちらかまたはそれに応じfind()て返すことができます。InternalUserExternalUser

于 2013-03-18T18:44:15.447 に答える
1

おそらく、メンバーとしてで名前が付けCurrentUserられたマネージドBeanですか?Internal/ExternalUser私自身のアプリケーションでは、UserサブクラスをビジネスオブジェクトおよびマネージドBeanとして使用する方法で、この必要なデータを挿入するかどうかはわかりません。

于 2013-03-18T18:11:16.907 に答える