具有可定制内容的JSF迭代复合组件

时间:2012-11-13 07:30:48

标签: java jsf jsf-2 composite-component

我想创建一个复合组件,其中迭代元素的实际布局可以传递给复合。 这是一个简化的示例,有效:

<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,但我不知道如何在我的组件中正确访问子<h:outputText value="Test #{user.name}"/>

1 个答案:

答案 0 :(得分:4)

您可以使用<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>

用法:

<my:list value="#{myBean.userList}">
  <h:outputText value="Test #{item.name}"/>
</my:list>