在我们的应用程序中,我们动态显示菜单。我们的菜单对象(下面代码中的菜单项)填充了所有菜单项(从 xml 读取)。然后主页通过使用 ui:repeat 生成菜单。Insdie ui:repeat 还有p:commandlink。下面是代码
<h:form id="mainMenu">
<h:panelGroup id="MMPanel" layout="block" styleClass="left_menu">
<ui:repeat var="node" value="#{menuitems.level1menus}">
<p:commandLink immediate="true" styleClass="menu"
action="#{menuitems.onLevel1MenuChange(node.id)}"
update=":pageTitle :menuLevel2 :menuLevel3" title="#{node.name}"
rendered="#{menuitems.selectedLevel1.id!=node.id}" onclick="menuSelect(this)">
<span class="icon icon_#{node.name}"></span>
<span class="text">#{node.name}</span>
</p:commandLink>
<p:commandLink immediate="true" styleClass="menu activelink"
action="#{menuitems.onLevel1MenuChange(node.id)}"
update=":pageTitle :menuLevel2 :menuLevel3" title="#{node.name}"
rendered="#{menuitems.selectedLevel1.id==node.id}" onclick="menuSelect(this)">
<span class="icon icon_#{node.name}"></span>
<span class="text">#{node.name}</span>
</p:commandLink>
</ui:repeat>
</h:panelGroup>
</h:form>
menuitems bean 处于会话级别。ui:repeat 中有两个不同的 p:commandlink。两者之间的唯一区别在于样式类和渲染属性。这样做是为了在用户第一次登录时识别默认菜单项并为其提供额外的“activeLink”css。下面给出了 onclick 调用的 java 脚本(如果需要)
function menuSelect(selectOne){
$(".left_menu>a").removeClass("activelink");
$(selectOne).addClass("activelink");
removeAllChannels();
}
function removeAllChannels(){
$.atmosphere.unsubscribe();
}
removeAllChannels 是为了删除我们拥有的 primepush 自动刷新通道。
我面临的问题是这个。所有链接都正确呈现,在 Firebug 中我看到所有链接都具有相同的 html。但是使用额外的 css“activeLink”(通过渲染条件 -- menuitems.selectedLevel1.id==node.id)生成的那个不起作用。当我单击此默认链接时,没有任何反应。所有其他链接工作正常。因此,当我单击不同的链接时,它会将我带到所需的页面。但是当我返回默认菜单时,什么也没有发生,我添加了一个自定义阶段侦听器,并看到单击此链接时调用了所有生命周期阶段,但操作方法没有。我浏览了这个和这个的链接,但无法找出问题所在。请帮忙。如果有不清楚的地方请告诉我