我想在tabview中显示一组编辑器。每个编辑器都有一个名为 component 的属性,用于存储渲染的编辑器。简单的编辑器使用HTML标签来渲染编辑器,而复杂的编辑器使用在其他页面中定义的编辑器。我发现我无法将editor.component
与 ui:include 一起使用,因为在构建树时该值不可用。我该如何解决这个问题?是否有任何替代ui:包括没有这个限制?
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:panelGroup>
<p:tabView value="#{groupsBean.groups}" var="group">
<p:tab title="#{group.name}">
<h:panelGroup>
<p:dataTable value="#{group.editors}" var="editor">
<p:column headerText="Key">
<h:outputText value="#{editor.name}" />
</p:column>
<p:column headerText="Value">
<h:panelGroup rendered="#{not editor.href}">
<h:outputText value="#{editor.component}" escape="false" />
</h:panelGroup>
<h:panelGroup rendered="#{editor.href}">
<ui:include src="#{editor.component}" />
</h:panelGroup>
</p:column>
</p:dataTable>
</h:panelGroup>
</p:tab>
</p:tabView>
</h:panelGroup>
编辑1
web.xml 包含以下条目:
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/springsecurity.taglib.xml; /WEB-INF/custom.taglib.xml</param-value>
</context-param>
custom.taglib.xml 位于WEB-INF文件夹中。
<facelet-taglib>
<namespace>http://www.custom.ro/</namespace>
<tag>
<tag-name>dynamic</tag-name>
<component>
<component-type>ro.custom.DynamicInclude</component-type>
</component>
</tag>
</facelet-taglib>
DynamicInclude使用@FacesComponent("ro.custom.DynamicInclude")
在 groups.xhtml 中,我添加了动态包含的名称空间 - xmlns:custom="http://www.custom.ro/"
。
EDIT2
最后,我设法让它发挥作用。缺少的是handler-class(com.corejsf.tag.DynamicIncludeHandler)的条目。我还在DynamicInclude的getSrc方法中删除了测试src for null的行。
答案 0 :(得分:1)
据我所知,ui没有这样的组件替代:include。我们自己使用FaceletContext.includeFacelet api实现了这样的功能。
一个相当简单的替代方法是使用c:forEach循环渲染表 - 无需自己编写额外的组件。缺点是你会得到每一行的组件,在某些情况下可能会占用大量资源。