我可能非常接近解决方案,但我是JSF的新手,我没有看到我的错误。 我有一个代表商业信息的第一个SessionScoped Managed Bean(地址,网站......)
@Named(value = "businessController")
@SessionScoped
public class BusinessController implements Serializable {
private Business current;
@EJB private BusinessFacade ejbFacade;
....
我有第二个SessionScoped Managed Bean代表登录用户
@Named(value = "loginController")
@SessionScoped
public class LoginController implements Serializable {
private Login current;
@EJB
private LoginFacade ejbFacade;
@ManagedProperty(value="#{businessController}")
private BusinessController businessController;
public BusinessController getBusinessController() {
return businessController;
}
public void setBusinessController(BusinessController businessController) {
this.businessController = businessController;
}
当用户登录时,我从loginController设置当前属性 根据当前用户的不同,我想从businessController设置business属性:
businessController.setCurrent(current.getBusiness());
我的问题是businessController属性为null!
我使用NetBeans 7.0.1和GlassFish 3.1 在调试模式下,我可以看到一个值为
的viewId变量>No current context (stack frame)<
不幸的是,它没有响铃给我。
任何帮助将不胜感激 感谢
答案 0 :(得分:3)
您正在将JSF托管bean与CDI托管bean混合使用。
您的BusinessController使用CDI注释@Named
进行注释,但会注入@ManagedProperty
注释(来自JSF)。 CDI托管bean需要注入@Inject
。在这种情况下,不需要吸气剂或固定剂。如果您倾向于使用CDI,请确保导入正确的@SessionScoped
:
CDI:javax.enterprise.context.SessionScoped
JSF:javax.faces.bean.SessionScoped
尝试以下方法(确保导入正确的范围类后):
@Inject private BusinessController businessController;