【问题标题】:Use many beans from the same class, different scopes使用来自同一类、不同范围的许多 bean
【发布时间】:2020-01-23 13:00:38
【问题描述】:

我想使用 ManagedBean 类 Users.java 创建 2 个具有不同范围的 bean 实例。我尝试通过两种方式做到这一点:

1。 为用户使用 ManagedBean 和 SessionScope 注释(这将创建一个具有会话范围的“用户”),并在 faces-config.xml 中声明来自用户的另一个 MenagedBean,具有请求范围。

@ManagedBean
@Component
@SessionScoped
public class Users implements Serializable {...} 

注意:“组件”来自Spring框架,暂时可以忽略。

在 faces-config.xml 中:

<managed-bean>
    <managed-bean-name>newUser</managed-bean-name>
    <managed-bean-class>ro.telacad.model.Users</managed-bean-class>   
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

在登录页面中,我在里面使用“#{users.}”。对于这种情况,登录工作正常(使用 Spring Security 制作)。我还创建了一个“注册”页面,在那里,我需要具有请求范围的“用户”bean 在数据库“#{newUser.}”中创建一个新用户。我在一个方法里面放了一个断点,当应用程序停在那里的时候,这个对象的所有属性都为null,应用程序抛出了一个NullPointerException。

2。 从 Users.java 中移除注解“ManagedBean”和“SessionsScoped”,并在 faces-config.xml 中声明 2 个托管 bean:

<managed-bean>
    <managed-bean-name>currentUser</managed-bean-name>
    <managed-bean-class>ro.telacad.model.Users</managed-bean-class>   
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
    <managed-bean-name>newUser</managed-bean-name>
    <managed-bean-class>ro.telacad.model.Users</managed-bean-class>   
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

当然,这次我在登录页面和欢迎页面“#{currentUser.}”中使用。这一次,在两种情况下(登录和注册)都会抛出 NullPointerException。

文件 faces-config.xml 已加载。我通过创建一个具有 1 个属性和 1 个方法的类 TempBean.java 对此进行了测试,在 faces-config.xml 中声明了此类的托管 bean,并在 h:form 中使用它。它奏效了。

【问题讨论】:

  • 填写 bean 字段的人可能指的是名为 users 的 bean?为什么需要这种模式?
  • 如果spring可以忽略,为什么要加它或者加标签呢?在一个类上同时使用 spring 和 jsf 注释是不好的做法(甚至会导致问题)
  • 这是一个个人应用程序,我想在这里学习borh JSF和Spring。所以我是他们两个的初学者。
  • 在这种情况下学习使用 CDI 会很容易。
  • 您可能想要创建两个新类 extend Users 类。它们都可以使用注释成为任意范围和名称的托管 bean。此外,两者都可以有自己的 @PostConstruct 方法来初始化它们的状态。

标签: jsf managed-bean


【解决方案1】:

我扩展了“用户”类,就像 Selaron 在评论中所说的那样。它工作正常。但我认为在实际应用程序中这样做并不是一个好主意,但目前我没有更好的主意。

【讨论】:

  • 也许(但我不会去那里,因为它已被弃用)JSF @ManagedProperty 适用于
猜你喜欢
  • 1970-01-01
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 2017-03-13
  • 2011-10-03
  • 1970-01-01
相关资源
最近更新 更多