Java ZK:如何从父菜单栏截取/使用事件?
我刚开始学习ZK,我遇到了一个严重的问题,无法从包含多个菜单项和菜单项的父菜单栏截取事件(onClick) 我正在使用AJAX更改内部面板的src uri 我不想为每个菜单项创建唯一的类 我想(但我不知道是否可能以及如何可能)创建一个类来截获来自菜单栏的onClick事件,但实际上,当这样的事件出现在菜单项上时 因此,我想将类控制器绑定到菜单栏,但同时获取用户单击的菜单项 这是我的代码: 索引zulJava ZK:如何从父菜单栏截取/使用事件?,java,ajax,menu,listener,zk,Java,Ajax,Menu,Listener,Zk,我刚开始学习ZK,我遇到了一个严重的问题,无法从包含多个菜单项和菜单项的父菜单栏截取事件(onClick) 我正在使用AJAX更改内部面板的src uri 我不想为每个菜单项创建唯一的类 我想(但我不知道是否可能以及如何可能)创建一个类来截获来自菜单栏的onClick事件,但实际上,当这样的事件出现在菜单项上时 因此,我想将类控制器绑定到菜单栏,但同时获取用户单击的菜单项 这是我的代码: 索引zul <zk> <style>.z-menubar-hor, .z-menub
<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>
.z-menubar-hor,.z-menubar-ver{边框:1px实心35; D8D8D8;}
.content{overflow-x:隐藏;overflow-y:滚动;}
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);
}
}
public类MenuAjaxbasedController扩展SelectorComposer{
私有静态最终长serialVersionUID=1L;
@电线
中心内容;
@电线
边界布局主边界;
@电线
门努伊特姆·康塔蒂;
@电线
包括主要内容包括:;
@电线
菜单栏菜单栏;
@听(“onClick=#contatti”)
公共作废更改页面(事件e){
//Menubar mb=(Menubar)e.getTarget();
System.out.println(e.getTarget());
字符串locationUri=“anagraficacontimaingrid.zul”;
//警报(“菜单链接测试”);
Include=(Include)选择器.iterable(mainBorder.getPage(),“#mainContentInclude”).iterator().next();
包括.setSrc(locationUri);
}
}
如你所见,我现在只听一个菜单项
非常感谢并致以最良好的问候。我想到了两种方法 使用ZK绑定 使用,您可以使用一个侦听器通过分号(
;
)分隔事件来侦听多个事件。例如:
@Listen("onClick = #contatti; onClick = #listeDiDistribuzione; onClick = #sottoscrizioni")
public void changePage(Event event) {
event.getTarget(); // the specific button clicked
}
当您注意到以下情况时,可以对其进行清理:
这里有很多种可能性,阅读文档(链接在上面),你会发现一些好东西
摇摆式
另一种方法是从Java方面进行。这是非常令人震惊的,并没有像视图那样清晰地分开,但完全有效,值得一提
private static final EventListener<Event> LISTENER = new EventListener<Event>() {
@Override
public void onEvent(Event event) {
event.getTarget(); // the specific button clicked
}
}
@Wire
private Menuitem contatti;
@Wire
private Menuitem listeDiDistribuzione;
@Override
public void doAfterCompose(Component component) {
contatti.addEventListener(Events.ON_CLICK, LISTENER);
listeDiDistribuzione.addEventListener(Events.ON_CLICK, LISTENER);
}
private static final EventListener=new EventListener(){
@凌驾
公共无效事件(事件){
event.getTarget();//单击了特定的按钮
}
}
@电线
私人Menuitem contatti;
@电线
私人菜单列表分配;
@凌驾
public void doAfterCompose(组件){
contatti.addEventListener(Events.ON_单击,LISTENER);
ListedDistributione.addEventListener(单击Events.ON,LISTENER);
}
当然,在这里你也可以通过一些CSS来简化事情
@Wire("#menubar ~ menuitem")
private List<Menuitem> menuitems;
@Override
public void doAfterCompose(Component component) {
for (Menuitem menuitem : menuitems) {
menuitem.addEventListener(Events.ON_CLICK, LISTENER);
}
}
@Wire(“menubar~menuitem”)
私有列表菜单项;
@凌驾
public void doAfterCompose(组件){
for(Menuitem Menuitem:menuitems){
menuitem.addEventListener(Events.ON_单击,侦听器);
}
}
StackOverflow中的Benvenuto。多亏了Sean Connoly,这里提供了正确的解决方案: 班级:
package mainPage;
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 menubar1;
@Listen("onClick = #menubar1 > menu > menupopup > menuitem")
// @Listen("onClick = #contatti; onClick = #listeDiDistribuzione; onClick = #sottoscrizioni; onClick = #profilo; onClick = #nuovaNewsletter; onClick = #messaggiInviati; onClick = #bozze; onClick = #smtpServers;")
public void change_page(Event e){
System.out.println(e.getTarget());
System.out.println(e.getTarget().getId());
String menuItemId = e.getTarget().getId();
String locationUri = "";
switch (menuItemId) {
case "contatti": locationUri = "anagraficaContattiMainGrid.zul";
break;
case "listeDiDistribuzione": locationUri = "";
break;
case "sottoscrizioni": locationUri = "";
break;
case "profilo": locationUri = "";
break;
case "nuovaNewsletter": locationUri = "";
break;
case "messaggiInviati": locationUri = "";
break;
case "bozze": locationUri = "";
break;
case "smtpServers": locationUri = "";
break;
default: locationUri = "anagraficaContattiMainGrid.zul";
break;
}
System.out.println(locationUri);
Include include = (Include)Selectors.iterable(mainBorder.getPage(), "#mainContentInclude").iterator().next();
include.setSrc(locationUri);
}
}
包主页;
公共类MenuAjaxbasedController扩展选择器或编译器{
私有静态最终长serialVersionUID=1L;
@电线
中心内容;
@电线
边界布局主边界;
@电线
门努伊特姆·康塔蒂;
@电线
包括主要内容包括:;
@电线
菜单栏菜单栏1;
@听一听(“onClick=#menubar1>menu>menupopup>menuitem”)
//@Listen(“onClick=#contatti;onClick=#listedDistributuzione;onClick=#sottoscrizioni;onClick=#profilo;onClick=#noova通讯;onClick=#messaggiInviati;onClick=#bozze;onClick=#smtpServers;”)
公共作废更改页面(事件e){
System.out.println(e.getTarget());
System.out.println(e.getTarget().getId());
字符串menuItemId=e.getTarget().getId();
字符串位置uri=“”;
开关(menuItemId){
案例“contatti”:locationUri=“anagraficacontimaingrid.zul”;
打破
案例“ListedDistributuzione”:locationUri=“”;
打破
案例“sottoscrizioni”:locationUri=“”;
打破
案例“profilo”:locationUri=“”;
打破
案例“nuovaNewsletter”:locationUri=“”;
打破
案例“messaggiInviati”:locationUri=“”;
打破
案例“bozze”:locationUri=“”;
打破
案例“smtpServers”:locationUri=“”;
打破
默认值:locationUri=“anagraficacontimaingrid.zul”;
打破
}
System.out.println(locationUri);
Include=(Include)选择器.iterable(mainBorder.getPage(),“#mainContentInclude”).iterator().next();
包括.setSrc(locationUri);
}
}
索引.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" if="${not sessionScope.userCredential.anonymous}">
<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="menubar1" 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>
<div if="${sessionScope.userCredential.anonymous}">
</div>
</zk>
.z-menubar-hor,.z-menubar-ver{边框:1px实心35; D8D8D8;}
.content{overflow-x:隐藏;overflow-y:滚动;}
<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" if="${not sessionScope.userCredential.anonymous}">
<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="menubar1" 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>
<div if="${sessionScope.userCredential.anonymous}">
</div>
</zk>