我正在尝试找出解决我在开发小型应用程序时遇到的一个小问题的方法。我试图传递在一个backing-bean中创建的对象,然后使用我在另一个backing-bean中创建的同一个对象。但是,我不想制作这些支持bean @SessionScoped
,最好不要使用@ManagedBean
,因为我在我的JavaEE应用程序中使用CDI
。
无论如何我可以使用CDI
注释并将一个backing-bean注入另一个,然后能够访问之前创建的对象吗?
举个例子,请参考下面的bean:
@Named
@ViewScoped
public RegisterController implements Serializable {
User user = new User();
// Getter and Setter methods which are populated by the JSF page
}
在上面的bean中创建对象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
注释吗?
更新
好的,所以当我使用RegisterController
注释注释SessionScoped
时,我已经完成了上述工作,但是我不希望这个Bean注释SessionScoped
,因为我可能会遇到更深入的问题轨道上的影响,例如田地的预先填充等等......任何想法如何以任何其他方式实现这一点?
答案 0 :(得分:2)
嗯,@ViewScoped
太短了,@SessionScoped
太长了。那么为什么不使用@ConversationScoped
?
请参阅here。
答案 1 :(得分:0)
你可以在RegistrationController中使用:
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("user", user);
并在PaymentController中:
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("user");
这非常有用,您可以在地图中保存所需的对象。