Javascript变量值从ManagedBean属性获取

时间:2012-12-10 08:11:21

标签: javascript jsf-2 managed-bean

我有一个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 = [];

有解决方法吗?

1 个答案:

答案 0 :(得分:0)

构造函数方法会失败,因为在构造实例之前在实例中注入EJB是impossible,因为EJB是NullPointerException,所以只需要null@PostConstruct方法应该可以正常工作。业务逻辑的getter方法也可以正常工作,但它是plain bad design

如果您在@PostConstruct中正确执行了这项工作,那么您的代码就可以了。您的具体问题表明usermenu.buildMenuDataByUserProfile("UAT");只返回一个空字符串,因此您的具体问题需要在更高级别解决。您应该已经在调试器和常识的帮助下自己确定了它。