以编程方式在支持bean </ui:include>中创建<ui:include src =“...”>

时间:2011-10-30 10:54:11

标签: java jsf facelets

在JSF页面中,我有:

<h:form id="form">
   <h:panelGroup id="content" layout="block"/>
</h:form>

在Java SessionScoped bean中,我有一个方法:

public void fillContent()
{
   UIComponent content = FacesContext.getCurrentInstance().getViewRoot().findComponent("form:content");
   content.getChildren().clear();
   content.getChildren().add(/*New <ui:include src="Page.xhtml"/>*/);
}

<ui:include src="Page.xhtml"/>作为content个孩子插入的Java代码是什么? 在哪里可以找到所有JSF Java名称映射的列表?

谢谢

1 个答案:

答案 0 :(得分:0)

不幸的是,ui:include被实现为标记处理程序。这意味着在构建组件树并且没有相应的UIComponent类时会对其进行求值和执行。

为了实现你的目标,在保留对在树构造期间可访问的faceletContext的引用之后,你必须使用像javax.faces.view.facelets.FaceletContext #includeFacelet这样的facelets api。这不是一个简单的方法,我强烈建议重新解释您的问题,并寻找另一种解决方案。

我不知道任何带有标记组件/处理程序映射的官方指南,我相信像“核心Java服务器面孔”这样的书会对此有所帮助。

您可以尝试在facelets中执行此操作,例如:

<h:form id="form">
  <ui:include src="#{content.path}"/>
</h:form>