【问题标题】:Dynamic menu in JSFJSF 中的动态菜单
【发布时间】:2014-08-28 17:47:47
【问题描述】:

我正在尝试使用 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>

${sessionMenu.action} 返回一个应该重定向到另一个页面的字符串(在 faces-config 文件中定义为导航案例)。 我还尝试用硬编码的字符串替换该操作,并且它可以工作,我猜问题出在未正确解释的 EL 上。

如果有人可以帮助我理解问题所在?

编辑: 以下是生成的链接示例:

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

这个是动态生成的,什么都不做;

<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>

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

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

【问题讨论】:

  • 您是否查看了开发者控制台中a4j:commandLink 的输出?
  • 是的,但我看不出动态字符串或硬编码字符串之间有什么区别 :(
  • 您能发布生成链接的示例吗?
  • 1) 这一切都在一个表格中,对吧? 2) #{sessionMenu.menus} 保证在回发期间完全相同? 3) 为什么使用带有导航案例的 ajax 命令链接而不是普通的页面到页面导航的普通 GET 链接? (UX/SEO 杀手) 4) 为什么${} 而不是#{}? (它们在 Facelets 中的行为完全相同相同,并且没有必要以 JSP EL 样式编写 JSF EL)
  • @BalusC: 1) 是的。 2)sessionMenu 是会话范围的,在会话期间不会重建。 3)因为当用户离开页面时我们有一些动作要做(检查/更新数据)4)只是错误;)

标签: jsf dynamic menu


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 2013-11-20
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    相关资源
    最近更新 更多