Меню - это просто набор ссылок, которые обычно идут в HTML <ul><li>
.Вы можете использовать CSS, чтобы придать ему приятный вид, но это не является обязанностью 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 не содержит компонента, который поддерживает итерацию / отображение древовидной структуры.Многие сторонние библиотеки компонентов имеют вид компонента <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>