我正在使用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。 我找不到任何关于这个问题的解决方案或提示,希望有人有个主意。
提前致谢 问候