我正在使用 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 不应为空。我找不到有关此问题的任何解决方案或提示,希望有人有想法。
提前致谢