ui:include using FaceletsContext



我正在使用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");
}

我想在选项卡中包含页面。当我调用 includePage() 时,我得到一个异常:org.apache.myfaces.view.facelets.el.ContextAwareELException:javax.el.ELException: java.lang.NullPointerException

我做错了什么?

MyFaces确实不支持这种结构。其中,FaceletContext仅在视图构建时(还原视图阶段)可用,并在此阶段结束时立即发布。它会在所有其他阶段抛出这样的 NPE,因为内部 Facelet 上下文已被释放并被取消。

不过,这种结构在莫哈拉有效。

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

另请参阅:

  • 如何通过导航菜单刷新动态包含内容?(JSF SPA)
  • 使用 <ui:include>

最新更新