0

我有一个 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>

托管豆

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 = [];

有解决方法吗?

4

1 回答 1

0

构造方法会失败,因为在构造实例之前不可能在实例中注入 EJB,你只会面对NullPointerExceptionEJB 是null. 该@PostConstruct方法应该可以正常工作。business-logic-in-getter 方法也可以正常工作,但它是简单的糟糕设计

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

于 2012-12-10T12:16:33.270 回答