ui:include使用FaceletsContext

时间:2012-12-18 10:13:24

标签: java jsf binding primefaces facelets

我正在使用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>

我的支持bean:

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

我做错了什么?

1 个答案:

答案 0 :(得分:0)

MyFaces确实不支持此构造。其中,FaceletContext仅在视图构建时(恢复视图阶段)期间可用,并在此阶段结束时立即释放。它会在所有其他阶段抛出类似的NPE,因为内部的Facelet上下文已被释放并被淘汰。

这个结构虽然可以在Mojarra中使用。

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

另见: