私は JSF 2.0 と Richfaces 3.3.2 を使用しています。私のページの 1 つで問題が発生しています。
まず第一に、いくつかのリッチ:タブを含むリッチ:タブパネルを含むメイン ページがありますが、それらを切り替えることは問題ありません。
私のページの最初のタブには、他のいくつかのタブを持つ別の tabPanel があります。これらはすべて、クリックされたタブに表示されるデータを編集するために ViewScoped ManagedBean を呼び出す actionListener を持っています。データを編集するメソッドは、正しく注入された ApplicationScoped Bean のメソッドを呼び出します (他のタブで動作します)。2 層目のタブを切り替えて 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 にすることはできません。この問題に関する解決策やヒントを見つけることができませんでした。誰かがアイデアを持っていることを願っています.
よろしくお願いします