【发布时间】:2014-02-04 02:38:34
【问题描述】:
基本上,我想遍历属性列表以呈现组件列表。 我正在使用 UIComponent 的组件类型,因为我需要为每个组件设置一个单独的范围。该组件有效,但我不知道如何从列表中为其提供参数。
这是一个简单的测试:
<ul>
<li>
<h:outputText value="test"/>
<h:outputLabel value=" : "/>
<bf:testA service="test"/>
<h:outputLabel value=" : "/>
<bf:testB service="test"/>
</li>
<c:forEach items='#{serviceList.val}' var="serviceval">
<li>
<h:outputText value="#{serviceval}"/>
<h:outputLabel value=" : "/>
<bf:testA service="#{serviceval}"/>
<h:outputLabel value=" : "/>
<bf:testB service="#{serviceval}"/>
</li>
</c:forEach>
<ui:repeat value="#{serviceList.val}" var="serviceval">
<li>
<h:outputText value="#{serviceval}"/>
<h:outputLabel value=" : "/>
<bf:testA service="#{serviceval}"/>
<h:outputLabel value=" : "/>
<bf:testB service="#{serviceval}"/>
</li>
</ui:repeat>
</ul>
下面的 testA 有效:
<c:interface>
<c:attribute name="service" />
</c:interface>
<c:implementation>
<h:outputText value="#{cc.attrs.service}"/>
</c:implementation>
而 testB 没有:
<c:interface componentType="testBComponent">
<c:attribute name="service" />
</c:interface>
<c:implementation>
<h:outputText value="#{cc.attrs.service}"/>
</c:implementation>
我需要 testB,因为它使用组件类型。
我的 TestBComponent 只是这个测试的一个简单 POJO:
@FacesComponent(value="testBComponent")
public class TestBComponent extends UINamingContainer
{
private String service;
public TestBComponent()
{
service = "Failed";
}
public String getService()
{
return service;
}
public void setService(String service)
{
this.service = service;
}
}
结果如下:
- 测试:测试:测试
- test1:test1:失败
- test2 : test2 : 失败
- test3:test3:失败
- test1:test1:失败
- test2 : test2 : 失败
- test3:test3:失败
在 Tomcat 8 上测试: jsf-myfaces:2.1.13 jsf-mojarra:2.2.4
我很难找到有关使用复合材料构建和渲染时间的文档。
【问题讨论】:
标签: jsf jsf-2 facelets custom-component