【发布时间】:2014-12-28 14:31:03
【问题描述】:
我正在尝试为我在开发小型应用程序时遇到的一个小问题找出解决方案。我试图传递一个在一个支持 bean 中创建的对象,然后使用我在另一个支持 bean 中创建的同一个对象。但是,我不想让这些 backing-beans @SessionScoped,并且最好不要使用 @ManagedBean,因为我正在为我的 JavaEE 应用程序使用 CDI。
我是否可以使用CDI 注释并将一个支持bean 注入另一个支持bean,然后能够访问先前创建的对象?
例如,参考下面的 bean:
@Named
@ViewScoped
public RegisterController implements Serializable {
User user = new User();
// Getter and Setter methods which are populated by the JSF page
}
获取在上述 bean 中创建的 Object User 并在下面的控制器中使用它:
@Named
@ViewScoped
public PaymentController implements Serializable {
@Inject RegisterController registerController; // Injecting bean
registerController.getUser().getName(); //this is null when I try access the properties of the object 'User'. I am assuming this is because @ViewScoped annotated on the 'RegisterController' class?
// I would like to use the User object created in 'RegisterController' here an access properties etc...
}
我可以使用 CDI 提供的 @Inject 注释吗?
更新
好的,所以当我用SessionScoped 注释注释RegisterController 时,我已经完成了上述工作,但是我不希望这个Bean 注释SessionScoped,因为我可能会在跟踪过程中遇到进一步的影响,例如作为字段的预填充等...有什么想法可以以其他方式实现吗?
【问题讨论】:
-
@SalihErikci,
@RequestScopedCDI 注释将不起作用,因为对象的持续时间必须比单个HTTP Request更长。
标签: java jsf jakarta-ee cdi