ManagedBean继承&常见的名字



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

  1. 内部用户(class InternalUser extends User)
  2. 外部用户(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()方法中,您可以相应地返回InternalUserExternalUser

可能是一个名为CurrentUser的托管bean,其中Internal/ExternalUser是成员?在我自己的应用程序中,我不确定是否会像您尝试的那样,通过使User子类兼做业务对象和托管bean来注入所需的数据。

相关内容

  • 没有找到相关文章

最新更新