1

私は PrimeFaces を使用しており、次の jsf ページがあります。

<h:form id="form1111">

            <p:commandLink value="Include Page" actionListener="#{dynaInclBean.includePage}" update="dynInclTabView"/>
            <p:tabView id="dynInclTabView" dynamic="true">
                <p:tab title="Somename" binding="#{dynaInclBean.tab}"/>
            </p:tabView>
    </h:form>

私のバッキングビーン:

private Tab tab;

public Tab getTab() {
    return tab;
}

public void setTab(Tab tab) {
    this.tab = tab;
}

public void includePage() throws IOException
{
    FaceletContext faceletContext = (FaceletContext) FacesContext.getCurrentInstance().getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
    faceletContext.includeFacelet(tab, "playerPhoto.xhtml");
}

ページをタブに含めたい。inlcudePage() を呼び出すと、例外が発生します: org.apache.myfaces.view.facelets.el.ContextAwareELException: javax.el.E​​LException: java.lang.NullPointerException

私は何を間違っていますか?

4

1 に答える 1

0

この構造は実際には MyFaces ではサポートされていません。その中で、FaceletContextはビューのビルド時 (ビューの復元フェーズ) でのみ使用でき、このフェーズの終わりまでにすぐに解放されます。内部の Facelet コンテキストが解放されて無効になっているため、他のすべてのフェーズでそのような NPE がスローされます。

ただし、この構成は Mojarra でも機能します。

あなたの最善の試みは、<ui:include src="#{bean.include}">または複数の条件付きでレンダリングされたインクルードを使用することです。この問題に対する「聖杯」の解決策はまだありません。問題は明確に理解されていますが、JSF/Facelets のライフサイクルを考えると解決は困難です。

以下も参照してください。

于 2012-12-18T11:21:09.470 に答える