我刚开始学习 ZK,我遇到了一个严重的问题,即从包含多个菜单和 menuitem 的父菜单栏拦截事件(onClick)。
我正在使用 AJAX 更改内部面板的 src uri。
我不想为每个菜单项创建一个独特的类。
我想(但我不知道是否以及如何可能)创建一个类来拦截来自菜单栏的 onClick 事件,但是当这样的事件出现时,实际上是在菜单项上。
所以我想将类控制器绑定到菜单栏,但同时获取用户点击的菜单项。
这是我的代码:
索引.zul
<zk>
<style>.z-menubar-hor, .z-menubar-ver { border: 1px solid #D8D8D8; }
.content {overflow-x: hidden;overflow-y: scroll;}</style>
<borderlayout hflex="1" vflex="1" id="mainBorder">
<north>
<include src="topBanner.zul"/>
</north>
<west>
<panel hflex="1" vflex="1" border="normal" title="MENU COMANDI" apply="mainPage.MenuAjaxbasedController">
<panelchildren style="padding:5px;">
<menubar id="menubar" orient="vertical" autodrop="true">
<menu label="ANAGRAFICA" id="anagrafica">
<menupopup>
<menuitem id="contatti" label="CONTATTI" />
<menuitem id="listeDiDistribuzione" label="LISTE DISTRIBUZIONE" />
<menuitem id="sottoscrizioni" label="SOTTOSCRIZIONI" />
<menuitem id="profilo" label="PROFILO" />
</menupopup>
</menu>
<menu label="MESSAGGI">
<menupopup>
<menuitem id="nuovaNewsletter" label="NUOVA NEWSLETTER" />
<menuitem id="messaggiInviati" label="MESSAGGI INVIATI" />
<menuitem id="bozze" label="BOZZE" />
</menupopup>
</menu>
<menu label="STRUMENTI">
<menupopup>
<menuitem id="smtpServers" label="SMTP SERVERS" />
</menupopup>
</menu>
</menubar>
</panelchildren>
</panel>
</west>
<center id="mainContent" autoscroll="true" border="none">
<include id="mainContentInclude" self="@define(content)" src=""/>
</center>
<south>
<include src="bottomFooter.zul"/>
</south>
</borderlayout>
MenuAjaxBasedController.java
public class MenuAjaxbasedController extends SelectorComposer<Component>{
private static final long serialVersionUID = 1L;
@Wire
Center mainContent;
@Wire
Borderlayout mainBorder;
@Wire
Menuitem contatti;
@Wire
Include mainContentInclude;
@Wire
Menubar menubar;
@Listen("onClick = #contatti")
public void change_page(Event e){
// Menubar mb = (Menubar) e.getTarget();
System.out.println(e.getTarget());
String locationUri = "anagraficaContattiMainGrid.zul";
// alert("menu link test");
Include include = (Include)Selectors.iterable(mainBorder.getPage(), "#mainContentInclude").iterator().next();
include.setSrc(locationUri);
}
}
如您所见,我现在只听一个菜单项。
非常感谢和最好的问候。