如何在我的自定义组件中使用IncludeHandler?

时间:2012-06-01 15:30:01

标签: java jsf-2 include facelets custom-component

有问题: The class behind ui:include JSF tag 我发现我需要使用IncludeHandler来使用

<ui:include>

编程。 但是,构造函数需要一个“config”参数,我不知道如何设置它 请举例说明如何将IncludeHandler用于简单的包含,如

<ui:include src="include.xhtml" />

我的jsf-component目前是以编程方式构建的,但我希望包含一些写成“.xhtml”的部分。所以最后一个网页设计师只有一个像

这样的组件
<fg:generator></fg:generator>

和一些“.xhtml” - 文件来玩弄样式。如果有一个比IncludeHandler更好的方法(仍然需要使用Java),请告诉我:)

1 个答案:

答案 0 :(得分:4)

如果您的唯一目的是以编程方式使用<ui:include>,那么您应该使用FaceletContext#includeFacelet()代替。假设您在自定义组件中:

FacesContext facesContext = FacesContext.getCurrentInstance();
FaceletContext faceletContext = (FaceletContext) facesContext.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
faceletContext.includeFacelet(this, "include.xhtml"); // this is your current UIComponent.

这是另一个启动示例,演示动态包含命令按钮:

<h:form>
    <h:commandButton value="include" action="#{bean.include}" />
</h:form>
<h:panelGroup id="include" />

public void include() throws IOException {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    FaceletContext faceletContext = (FaceletContext) facesContext.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
    faceletContext.includeFacelet(facesContext.getViewRoot().findComponent("foo"), "include.xhtml");
}