我想创建一个复合组件,可以将迭代元素的实际布局传递给复合组件。
这是一个简化的示例并且有效:
<composite:interface>
<composite:attribute name="value"/>
</composite:interface>
<composite:implementation>
<ul>
<c:forEach var="i" items="#{cc.attrs.value}">
<li>
<h:outputText value="Test #{i.name}"/>
</li>
</c:forEach>
</ul>
但我不想要h:outputText
在组件中进行硬编码。当使用该组件时,我试图拥有这样的东西:
<my:list var="user" value="#{myBean.userList}">
<h:outputText value="Test #{user.name}"/>
</my:list>
假设我必须使用var
,但我不知道如何在我的组件中处理这个问题and访问孩子<h:outputText value="Test #{user.name}"/>
正确。
你可以使用<composite:insertChildren />
能够将定义的子组件“传递”到复合组件定义中。我也推荐使用<ui:repeat>
代替<c:forEach>
因为它是一个真正的迭代组件并且更适合 JSF。以下是如何实现组件的示例:
<composite:interface>
<composite:attribute name="value"/>
</composite:interface>
<composite:implementation>
<ul>
<ui:repeat var="item" value="#{cc.attrs.value}">
<li>
<composite:insertChildren />
</li>
</ui:repeat>
</ul>
</composite:implementation>
Usage:
<my:list value="#{myBean.userList}">
<h:outputText value="Test #{item.name}"/>
</my:list>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)