从ManagedBean属性获取Javascript变量值
我有一个ManagedBean,其属性从EJB获取其值。在JSF中,我有一个Javascript变量,该变量然后从ManagedBean属性获取其值。当我运行项目时,Javascript变量没有设置 在ManagedBean中,我尝试了以下方法,但不起作用:从ManagedBean属性获取Javascript变量值,javascript,jsf-2,managed-bean,Javascript,Jsf 2,Managed Bean,我有一个ManagedBean,其属性从EJB获取其值。在JSF中,我有一个Javascript变量,该变量然后从ManagedBean属性获取其值。当我运行项目时,Javascript变量没有设置 在ManagedBean中,我尝试了以下方法,但不起作用: 在构造函数中设置属性的值 使用@PostConstruct注释在init()方法中设置属性值 在getMenuData()方法中设置它 JSF-JavaScript <script> YAHOO.util.Event
- 在
构造函数中设置属性的值
- 使用
注释在@PostConstruct
方法中设置属性值init()
- 在
方法中设置它getMenuData()
<script>
YAHOO.util.Event.onDOMReady(function ()) {
// Data to build the menubar
var menuData = [#{userMenu.menuData}];
...
});
</script>
当我查看源代码时,我只看到var menuData=[]代码>
有解决方法吗?构造函数方法会失败,因为在构造实例之前要在实例中注入EJB,您只会遇到NullPointerException
,因为EJB是null
。@PostConstruct
方法应该可以很好地工作。getter方法中的业务逻辑也可以很好地工作,但事实并非如此
如果您在@PostConstruct
中正确地执行了作业,那么您的代码看起来很好。您的具体问题表明usermenu.buildMenuDataByUserProfile(“UAT”)
只返回一个空字符串,因此您的具体问题需要在更高级别上解决。您应该已经在调试器和常识的帮助下自己确定了它。我更喜欢使用h:inpurthidden
来访问它,就像
,而不是通过它的id访问它(可能有formId前缀…除非使用prependId=“false”
)我再次尝试使用@PostConstruct
注释,启动了调试器并找到了问题所在。EJB方法中的错误。我把注意力集中在问题的错误方面。
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;
}