0

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

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

在我页面的第一个选项卡上,我有另一个带有其他选项卡的 tabPanel。它们都有一个 actionListener,它将调用 ViewScoped ManagedBean 来编辑一些数据,这些数据将显示在单击的选项卡上。编辑数据的方法调用正确注入的 ApplicationScoped Bean 上的方法(它适用于其他选项卡)。在第二层切换选项卡并调用操作方法时,ApplicationScoped Bean 为空。这只发生在我切换选项卡时(所以它不会发生在默认显示的第一个选项卡上)所以我认为它与 actionListener 有关,但我不知道为什么。不幸的是,我无法提供实际代码,但这是我页面的粗略结构。

主页面.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
}

应用程序Bean.java

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

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

提前致谢

4

0 回答 0