在我们的一个应用程序中,我们有两类用户,
class InternalUser extends User
)class ExternalUser extends User
)我们使用这些作为会话范围的托管bean(基本上是注入登录用户的详细信息,其中class User
中有一些共同的细节,以及上述两个类中的一些具体细节)
我是否可以为托管bean设置相同的名称(此处为“loggedInUser
”)?
Faces抛出异常“已经注册了名为'loggedInUser'的托管bean。替换现有的托管bean类...... ”
我们如何管理这种情况?
答案 0 :(得分:2)
一种方法是不要将它变成JSF托管bean。使与登录表单关联的bean成为请求/视图作用域,并将User
实例放在会话范围内。
E.g。
User user = service.find(username, password);
if (user != null) {
externalContext.getSessionMap().put("user", user);
}
它将在EL范围内以#{user}
形式提供(因此也可以通过其他bean中的@ManagedProperty
注入该表达式)。在find()
方法中,您可以相应地返回InternalUser
或ExternalUser
。
答案 1 :(得分:1)
也许一个名为CurrentUser
的托管bean以Internal/ExternalUser
为成员?在我自己的应用程序中,我不确定是否通过将User
子类作为业务对象和托管bean以您尝试的方式进行双重注入所需的数据。