表 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>
...嗯,是不是很酷?