在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名称映射的列表?
谢谢
答案 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>