ApplicationScoped Bean在rich:tab的actionListener-method上为null

时间:2012-11-14 15:29:15

标签: jsf jsf-2 richfaces

我正在使用JSF 2.0和Richfaces 3.3.2。 我的一个页面上有问题。

首先,我有一个主页面,其中包含一个rich:tabPanel,其中包含多个rich:tabs,在它们之间切换没有问题。

在我页面的第一个标签页上,我有另一个tabPanel和其他一些标签。 它们都有一个actionListener,它将调用ViewScoped ManagedBean来编辑一些数据,这些数据将显示在单击的选项卡上。编辑数据的方法调用正确注入的ApplicationScoped Bean上的方法(它在其他选项卡中工作)。切换第二层上的选项卡并调用action-method时,ApplicationScoped Bean为null。 这只发生在我切换标签时(所以它不会发生在第一个标签上,默认显示)所以我认为它与actionListener有关,但我无法弄清楚原因。不幸的是我无法提供实际代码,但这是我页面的粗略结构。

mainPage.xhtml

...
<rich:tabPanel>
    <rich:tab>
        <ui:include src="tabs/tab1.xhtml" />
    </rich:tab>
    otherTabs
</rich:tabPanel>
...

tab1.xhtml

...
<rich:tabPanel>
    <rich:tab actionListener="#{viewScopedBean.method}">
        <ui:include src="subtabs/subtab1.xhtml" /> 
    </rich:tab>
    <rich:tab actionListener="#{viewScopedBean.method2}">
        <ui:include src="subtabs/subtab2.xhtml" /> 
    </rich:tab>
</rich:tabPanel>

ViewScopedBean.java

@ManagedBean
@ViewScoped
public class ViewScopedBean {
    @ManagedProperty(value="#{applicationBean}")
    private ApplicationBean applicationBean;

    private Data data;

    public void init() {
        ...
        data = applicationBean.retrieveData();
        ...
    }

    public void method(ActionEvent e) {
        ...
        data = applicationBean.retrieveData();
        ...
    }

    public void method2(ActionEvent e) {
        ...
        data = applicationBean.retrieveData();
        ...
    }
    // getters/setters
}

ApplicationBean.java

@ManagedBean
@ApplicationScoped
public class applicationBean {
     public Data retrieveData() {
           ...
     }
 }

单击subtab2时,我在行data = applicationBean.getData()处得到NullPointerException,因此applicationBean为null。每次在我切换到的每个选项卡上都会发生这种情况,但从不在init()方法中,因此applicationBean不应为null。 我找不到任何关于这个问题的解决方案或提示,希望有人有个主意。

提前致谢 问候

0 个答案:

没有答案