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仅在视图构建期间(恢复视图阶段)可用,并在此阶段结束时立即发布。它会在所有其他阶段抛出类似的 NPE,因为内部 Facelet 上下文已被释放并取消。

不过,这种构造在 Mojarra 中有效。

您最好的尝试是使用<ui:include src="#{bean.include}">或多个有条件呈现的包含。这个问题仍然没有“圣杯”解决方案。问题很清楚,但鉴于 JSF/Facelets 生命周期,解决方案很难。

也可以看看:

于 2012-12-18T11:21:09.470 回答