菜單只是一堆鏈接,它們通常在HTML <ul><li>
中。你可以使用CSS給它一個很好的look'n'feel,但這不是JSF的責任。
如果它是一個平面列表,只是做
<ul>
<ui:repeat value="#{menu.list}" var="item">
<ui:fragment rendered="#{item.accepts(user.roles)}">
<li><a href="#{item.url}">#{item.name}</a></li>
</ui:fragment>
</ui:repeat>
</ul>
如果它是一棵樹,那麼你真的需要前往一個第三方組件庫,因爲標準的JSF組件庫不包含支持iteratin組件/顯示一個樹結構。很多第三方組件庫都有一種<xx:tree>
組件。
您也可以自己創建一個自定義樹迭代器組件,它不會呈現任何標記。這裏是觀方怎麼能看起來像一個開球例如:
<xx:tree value="#{menu.tree}" var="item">
<xx:treeNode level="0">
<xx:treeNodeItem rendered="#{item.accepts(user.roles)}">
<h3>#{item.name}</h3>
<xx:insertTreeNodeChildren />
</xx:treeNodeItem>
</xx:treeNode>
<xx:treeNode>
<ul>
<xx:treeNodeItem rendered="#{item.accepts(user.roles)}">
<li>
<a href="#{item.url}">#{item.name}</a>
<xx:insertTreeNodeChildren />
</li>
</xx:treeNodeItem>
</ul>
</xx:treeNode>
</xx:tree>
非常感謝您對最近的重播。所以我想我必須決定是否需要嵌套菜單(樹)或不。如果我需要實現可摺疊的左側菜單面板。我猜,我可以用JS和核心JSF中的圖標來做什麼。有點奇怪的是,核心JSF 2.0沒有樹視圖組件,以便於菜單構建。感謝您的模式建議。 – Chris 2011-05-04 06:34:27