【发布时间】: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)只是错误;)