1

在我们的一个应用程序中,我们有两类用户,

  1. 内部用户 ( class InternalUser extends User)
  2. 外部用户 ( class ExternalUser extends User)

我们将它们用作会话范围的托管 bean(基本上是为了注入登录用户的详细信息,在class User上述 2 个类中的每个类中都有一些常见的细节和一些特定的细节)。

我可以为两个托管 bean 使用相同的名称(此处为“ loggedInUser”)吗?

Faces 抛出异常“名为‘loggedInUser’的托管 bean 已注册。替换现有托管 bean 类...

我们如何管理这种情况?

4

2 回答 2

2

一种方法是不让它成为 JSF 托管 bean。使与登录表单关联的 bean 成为请求/视图范围的 bean,并将User实例放入您自己的会话范围中。

例如

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

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

它将像#{user}在 EL 范围内一样可用(因此也可以通过@ManagedProperty该表达式的其他 bean 中注入)。在该find()方法中,您可以只返回一个InternalUserExternalUser相应地返回。

于 2013-03-18T18:44:15.447 回答
1

CurrentUser也许一个以成员命名的托管bean Internal/ExternalUser?在我自己的应用程序中,我不确定是否会User按照您尝试的方式将子类作为业务对象和托管 bean 来注入这些所需的数据。

于 2013-03-18T18:11:16.907 回答