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

标签 java jsf menu java-ee-6 cdi

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

相关文章:

java - Android Studio & AdMob——无法实例化以下类

java - 由于循环依赖,在基类以外的对象上指定 Jackson JSON 子类型

java - 检查未修剪字符串列表是否包含修剪字符串

java - Primefaces 选项卡 View : set Active Index after some counting

java - 如何在本地 TomCat 服务器托管的 JSF 应用程序中使用在外部 JAR 中声明的接口(interface)

maven - 在 Maven 中将 Primefaces 从 6.2 升级到 7.0.14

jquery - 我的 jquery 菜单不想正常工作

javascript - 自定义 Superfish 下拉菜单后的问题

css - 菜单在 IE8 中不可见

java - 图矩阵项目(静态中的非静态)