marți, 5 ianuarie 2016

JSF 2.2 [usage pitfall] - Counting the children of a composite component

Suppose that you have a composite component that accepts children via the <cc:insertChildren/> tag. Sometimes you may need to render a certain message when the list of children is empty, and for this you may think of writing a composite component implementation, as shown in the following code:

<!-- IMPLEMENTATION -->
<cc:implementation>
 <div id="#{cc.clientId}">
  <ul>
   <cc:insertChildren/>
   <h:panelGroup rendered="#{cc.childCount == 0}">
    The list of names is empty!
   </h:panelGroup>
  </ul>
 </div>
</cc:implementation>

Now if the composite component is used as follows, you may think that the message The list of names is empty! will be rendered:

<t:iccc/>

Well, you are right! But, the same message, next to the list content, will be rendered when the component is used as follows:

<t:iccc>
 <li>Mike</li>
 <li>Andrew</li>
</t:iccc>

In order to solve this issue, you can use the following code:

<cc:implementation>
 <div id="#{cc.clientId}">
  <ul>
   <cc:insertChildren/>
    <c:if test="#{cc.childCount == 0}">
     The list of names is empty!
    </c:if>
  </ul>
 </div>
</cc:implementation>

Niciun comentariu:

Trimiteți un comentariu