37.2. <ui:component>

表 37.2. 构件信息

属性是否必须描述示例
id一个可选的唯一id,如果省略,Facelets框架将使用某种全局算法自动分配一个。mainMenu
binding这个binding属性与普通JSF构件上的binding属性是一样的,允许你用来引用一个JavaBean上的一个属性。(在创建构件树过程中,)如果目标属性没有已经被赋值为一个UIComponent实例,JSF将惰性地(译注:即在实际访问时才创建)为你创建一个实例,并把它赋值到JavaBean(的目标属性)中,然后再继续创建构件树过程。#{page.menu}

component标签与composition标签的行为是完全一样的,不同之处是component标签会在构件树中添加一个UIComponent实例,作为其中所有子构件的根结点。

标签之前的文本将被移除.
<ui:component binding="#{backingBean.menu}">
  <ul id="mainMenu">
  <c:forEach var="link" items="#{menuOptions[role]}">
    <c:choose>
      <c:when test="#{link.id == page}">
        <li class="current"><a href="#{link.uri}">#{link.text}</a></li>
      </c:when>
      <c:otherwise>
        <li><a href="#{link.uri}">#{link.text}</a></li>
      </c:otherwise>
    </c:choose>
  </c:forEach>
  </ul>
</ui:component>
标签之后的文本将被移除.

通过在标签库中使用标签文件,你可以将上面的文件作为标签加入到你的页面中,并且标签属性将自动作为变量传入到上面的代码中(请留意第4行的role与第6行的page变量)。

...
<span id="header">
  <my:mainMenu page="home" role="#{user.role}"/>
</span>
...

嗯,是不是很酷?