【问题标题】:ui:include using FaceletsContextui:include 使用 FaceletsContext
【发布时间】:2012-12-05 12:30:16
【问题描述】:

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

我做错了什么?

【问题讨论】:

  • 你确定两个tab都不为空,文件直接在classpath的文件夹下吗?

标签: java jsf binding primefaces facelets


【解决方案1】:

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

这个结构在 Mojarra 中也可以工作。

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

另见:

【讨论】:

  • 我需要制作一个能够添加和删除标签的tabView,所以我需要在java端将页面包含到标签中
  • 只需将标签的动态列表提供给&lt;p:tabView value&gt;。另见stackoverflow.com/questions/11961692/…
猜你喜欢
  • 2012-01-14
  • 2012-06-16
  • 2011-07-14
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
  • 1970-01-01
  • 2015-09-03
  • 2012-08-17
相关资源
最近更新 更多