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