我正在尝试使用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文件中定义为navigation-case)。
我也尝试用硬编码的字符串替换动作,并且它可以工作,我猜这个问题是由于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>
这个使用了静态字符串,重定向工作正常。
这两个链接是在同一页面和同一请求中生成的。
答案 0 :(得分:0)
最后,我让它工作了,我只是将操作值更改为方法名称,因为它在我的bean中定义,这意味着:
<a4j:commandLink value="#{submenu.label}" action="#{sessionMenu.getAction()}" />
如果有人可以解释原因,我很好奇。