gpt4 book ai didi

java - JSF 2 动态菜单处理的最佳实践?

转载 作者:行者123 更新时间:2023-11-30 05:05:51 25 4
gpt4 key购买 nike

我正在寻找使用 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/

25 4 0