在我们的一个应用程序中,我们有两类用户,
- 内部用户(
class InternalUser extends User
) - 外部用户(
class ExternalUser extends User
)
我们使用这些作为会话作用域的托管bean(基本上是注入登录用户的详细信息,这些详细信息在class User
中有一些共同的细节,在上面提到的两个类中有一些特定的细节)。
我可以为两个管理bean(这里是"loggedInUser
")具有相同的名称吗?
Faces抛出一个异常"名为'loggedInUser'的托管bean已经注册。替换现有的托管bean类…
我们如何处理这种情况?
一种方法就是不让它成为JSF托管bean。将与登录表单关联的bean设置为请求/视图作用域,并将User
实例置于会话作用域中。
。
User user = service.find(username, password);
if (user != null) {
externalContext.getSessionMap().put("user", user);
}
它将在EL作用域中作为#{user}
可用(因此也可以通过该表达式在其他bean中通过@ManagedProperty
进行注入)。在find()
方法中,您可以相应地返回InternalUser
或ExternalUser
。
可能是一个名为CurrentUser
的托管bean,其中Internal/ExternalUser
是成员?在我自己的应用程序中,我不确定是否会像您尝试的那样,通过使User
子类兼做业务对象和托管bean来注入所需的数据。