我有一个ManagedBean,其属性从EJB获取其值。在JSF中,我有一个Javascript变量,然后从ManagedBean属性中获取它的值。当我运行项目时,未设置Javascript变量。
在ManagedBean中,我尝试了以下方法但不起作用:
在Constructor
使用init()
注释
@PostConstruct
方法中设置属性的值
在getMenuData()
方法中进行设置。
JSF JavaScript
<script>
YAHOO.util.Event.onDOMReady(function ()) {
// Data to build the menubar
var menuData = [#{userMenu.menuData}];
...
});
</script>
ManagedBean
package com.qrra.PROFIT.web;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import qrcom.profit.ejb.UserMenuFacade;
@ManagedBean
@ViewScoped
public class UserMenuController {
public UserMenuController() {
menuData = usermenu.buildMenuDataByUserProfile("UAT");
}
// @PostConstruct
// public void init() {
// menuData = usermenu.buildMenuDataByUserProfile("UAT");
// }
public void getMenuData() {
return this.menuData;
}
public void setMenuData(String menuData) {
// usermenu.buildMenuDataByUserProfile("UAT");
this.menuData = menuData;
}
private String menuData;
@EJB
private UserMenuFacade usermenu;
}
当我查看来源时,我只看到var menuData = [];
有解决方法吗?
答案 0 :(得分:0)
构造函数方法会失败,因为在构造实例之前在实例中注入EJB是impossible,因为EJB是NullPointerException
,所以只需要null
。 @PostConstruct
方法应该可以正常工作。业务逻辑的getter方法也可以正常工作,但它是plain bad design。
如果您在@PostConstruct
中正确执行了这项工作,那么您的代码就可以了。您的具体问题表明usermenu.buildMenuDataByUserProfile("UAT");
只返回一个空字符串,因此您的具体问题需要在更高级别解决。您应该已经在调试器和常识的帮助下自己确定了它。