从ManagedBean属性获取Javascript变量值

从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

我有一个ManagedBean,其属性从EJB获取其值。在JSF中,我有一个Javascript变量,该变量然后从ManagedBean属性获取其值。当我运行项目时,Javascript变量没有设置

在ManagedBean中,我尝试了以下方法,但不起作用:

  • 构造函数中设置属性的值

  • 使用
    @PostConstruct
    注释在
    init()
    方法中设置属性值

  • getMenuData()
    方法中设置它

JSF-JavaScript

<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;

}