我正在寻找使用 JSF 和 CDI 处理简单菜单的最佳实践。
我想要一个带有动态条目的顶部菜单。类似于(来自主模板):
<ul>
<c:forEach var="menuItem" items="#{navigationBean.topMenuItems}">
<c:choose>
<c:when test="#{navigationBean.isSelectedTop(menuItem.name)}">
<li class="current_page_item"><h:outputLink value="#{menuItem.url}"><h:outputText value="#{menuItem.name}" /></h:outputLink></li>
</c:when>
<c:otherwise>
<li><h:outputLink value="#{menuItem.url}"><h:outputText value="#{menuItem.name}" /></h:outputLink></li>
</c:otherwise>
</c:choose>
</c:forEach>
</ul>
NavigationBean(Sessionscoped,并保存NavigationItems列表)和NavigationItem只是bean。然后打开另一个 View ,我将当前 View ID 设置为在 navigatiobean 中选择的:
@PostConstruct
private void init (){
navigation.setSelectedTopMenu(getViewId());
}
问题是,为时已晚。页面已呈现,并且未选择 View ID。
这个方法是不是一点都不好?有没有最佳实践?搜索 JSF 菜单和 JSF 导航会导致其他问题,因此我找不到任何内容。
提前致谢!
最佳答案
一种方法是使用组件绑定(bind)(例如到 h:panelGroup)并在绑定(bind)方法中生成整个菜单。
JSF 页面:
<h:panelGroup binding="navigationBean.navigationMenu" />
bean :
public HtmlPanelGroup getNavigationMenu() {
HtmlPanelGroup menu = new HtmlPanelGroup();
menu.setId("menu");
HtmlOutputLink link = new HtmlOutputLink();
// ... other components etc.
menu.getChildren().add(link);
}
关于java - JSF 2 动态菜单处理的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5117581/