JSF中的动态菜单

JSF中的动态菜单,jsf,dynamic,menu,Jsf,Dynamic,Menu,我试图用JSF2/RichFaces实现一个动态菜单。这个想法很简单,菜单在数据库中定义,并且取决于连接的用户 菜单生成正确,但操作不起作用,我不明白为什么。 这是我的JSF代码: <c:forEach items="${sessionMenu.menus}" var="menu"><!-- Menus --> <li> <a href="#" id="${menu.label}">${menu.label}</a&g

我试图用JSF2/RichFaces实现一个动态菜单。这个想法很简单,菜单在数据库中定义,并且取决于连接的用户

菜单生成正确,但操作不起作用,我不明白为什么。 这是我的JSF代码:

<c:forEach items="${sessionMenu.menus}" var="menu"><!-- Menus -->
    <li>
        <a href="#" id="${menu.label}">${menu.label}</a>
        <ul class="sub-menu" id="sub-${menu.label}">
            <c:forEach items="${menu.submenus}" var="submenu"><!-- Sub menus -->
                <li>
                    <a4j:commandLink value="${submenu.label}" action="${sessionMenu.action}"/>
                </li>
            </c:forEach>
        </ul>
    </li>
</c:forEach>
这个是动态生成的,它什么也不做

<a id="mainForm:j_id_g_0_2_0_4" onclick="RichFaces.ajax("mainForm:j_id_g_0_2_0_4",event,{"incId":"1"} );return false;" name="mainForm:j_id_g_0_2_0_4" href="#">Screen</a>

这个使用了静态字符串,重定向工作正常


这两个链接是在同一个页面和同一个请求中生成的。

最后,我让它工作了,我只是将操作值更改为在我的bean中定义的方法名称,这意味着:

<a4j:commandLink value="#{submenu.label}" action="#{sessionMenu.getAction()}" />


如果有人能解释原因,我很好奇。

你看过开发者控制台中
a4j:commandLink
的输出了吗?是的,但我看不出动态或硬编码字符串之间有什么区别:(你能给出生成链接的示例吗?1)这都是一种形式,对吗?2)
#{sessionMenu.menus}
在回发期间保证完全相同?3) 为什么要使用带有导航案例的ajax命令链接,而不是用于普通页面到页面导航的普通GET链接?(UX/SEO杀手)4)为什么
${}
而不是
{}
?(它们在facelet中的行为完全相同,用JSP-EL风格编写JSF-EL没有意义)@BalusC:1)是的。2)
sessionMenu
是会话范围,在会话期间不会重建。3) 因为当用户错误地离开页面(检查/更新数据)4)时,我们有一些操作要做;)
<a4j:commandLink value="#{submenu.label}" action="#{sessionMenu.getAction()}" />