我正在使用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.ELException:java.lang.NullPointerException
我做错了什么?
答案 0 :(得分:0)
MyFaces确实不支持此构造。其中,FaceletContext
仅在视图构建时(恢复视图阶段)期间可用,并在此阶段结束时立即释放。它会在所有其他阶段抛出类似的NPE,因为内部的Facelet上下文已被释放并被淘汰。
这个结构虽然可以在Mojarra中使用。
您最好的尝试是使用<ui:include src="#{bean.include}">
或多个有条件渲染的包含。对于这个问题,仍然没有“圣杯”解决方案。问题清楚地被理解,但考虑到JSF / Facelets生命周期,解决方案很难。