菜单只是一堆链接,它们通常在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