我现在要实现一个查询,是这样的:查询条件输入后点击按钮,查询的结果用tabbox显示,tabbox里include了两个window,目前我是点击按钮之后整个页面会刷新了一次,我想实现点击按钮之后不要整个window刷新,想要单个的tabbox刷新一次,请问怎么实现??各位高手帮帮忙
34 个解决方案
#1
有没有人懂的,帮我一下
#2
自己顶下,哪个高手帮帮忙啊
#3
代码贴出来啊
#4
用ajax轮询吧
#5
怎么轮询,不懂啊
#6
<button label="查詢" onClick="@command('Query')"/>
<tabbox id="tb" height="600px">
<tabs id="tabs">
<tab id="test01" label="資訊"/>
<tab id="test02" label="test"/>
</tabs>
<tabpanels>
<tabpanel><include src="/mvc/test01Info/test01Info.zul"/></tabpanel>
<tabpanel><include src="/mvc/test0202Info/test02Info.zul"/></tabpanel>
</tabpanels>
</tabbox>
目前在Query方法里我把整个页面跳转回本页面,两个include进来的window才有值,我想实现不要跳转本页面,只刷新这个tabbox组件,有没有办法实现,各位帮帮忙啊
<tabbox id="tb" height="600px">
<tabs id="tabs">
<tab id="test01" label="資訊"/>
<tab id="test02" label="test"/>
</tabs>
<tabpanels>
<tabpanel><include src="/mvc/test01Info/test01Info.zul"/></tabpanel>
<tabpanel><include src="/mvc/test0202Info/test02Info.zul"/></tabpanel>
</tabpanels>
</tabbox>
目前在Query方法里我把整个页面跳转回本页面,两个include进来的window才有值,我想实现不要跳转本页面,只刷新这个tabbox组件,有没有办法实现,各位帮帮忙啊
#7
ZK后台你可以直接操作tabbox的。
在你的点击按钮事件中:
//获得tabbox对象
Tabbox tb = self.getFellowIfAny("tabbox");
//对tabbox进行操作
在你的点击按钮事件中:
//获得tabbox对象
Tabbox tb = self.getFellowIfAny("tabbox");
//对tabbox进行操作
#8
ZK是基于AJAX的,所有的操作都可以异步刷新。
后台对象操作,均可在页面中体现出。
后台对象操作,均可在页面中体现出。
#9
就是卡在對tabbox刷新的操作上,請問應該怎麼写,Thanks!
#10
能不能给我例子,这块的刚接触,很多都不懂
#11
ZK是我几个月前做的,现在大致看代码告诉你吧:
我这里用的是apply
<window id="payApplyPlanMgrWin" width="100%"
border="0" position="center,top" height="100%" apply="${testMgrController}">
<Tabbox id="yourtabbox">
</Tabbox>
<toolbarbutton label="测试" onClick="controller.myTest(self)"></toolbarbutton>
在你的TestMgrController类中,定义yourtabbox对象
然后在你的按钮单击事件myTest中就可以操作yourtabbox了,
yourtabbox应该有很多属性的,如:
//获得子对象集合
List<org.zkoss.zk.ui.Component> list = yourtabbox.getChildren();
//设置式样
yourtabbox.setStyle等等。
直接对yourtabbox这个对象操作即可。
我这里用的是apply
<window id="payApplyPlanMgrWin" width="100%"
border="0" position="center,top" height="100%" apply="${testMgrController}">
<Tabbox id="yourtabbox">
</Tabbox>
<toolbarbutton label="测试" onClick="controller.myTest(self)"></toolbarbutton>
在你的TestMgrController类中,定义yourtabbox对象
然后在你的按钮单击事件myTest中就可以操作yourtabbox了,
yourtabbox应该有很多属性的,如:
//获得子对象集合
List<org.zkoss.zk.ui.Component> list = yourtabbox.getChildren();
//设置式样
yourtabbox.setStyle等等。
直接对yourtabbox这个对象操作即可。
#12
总的来说就一句话,ZK页面的对象和你后台对象可以一一对应,
你对后台对象的操作,都可以体现到页面上。
感觉ZK做一些ERP类的应用还行,做网站类的就不行了,性能不好,封装的太多了。
你对后台对象的操作,都可以体现到页面上。
感觉ZK做一些ERP类的应用还行,做网站类的就不行了,性能不好,封装的太多了。
#13
能告诉我刷新这个组件的操作怎么写吗,我网上查了,用tabbox.invalidate();但是没反应
#14
你可以用个按钮点击事件来刷新tabbox啊,
我现在手头上没有环境,只能凭记忆告诉你。
tabbox可能也有点击的事件,不确定,
我现在手头上没有环境,只能凭记忆告诉你。
tabbox可能也有点击的事件,不确定,
#15
跟你说下我的问题吧,我现在的问题就是想在按钮点击事件中刷新这个tabbox,但不知道怎么来刷新它,也没找到刷新这个组件的方法
#16
这个是ZUL中的按钮+按钮的单击事件
<button id="refreshButton" label="刷新" width="80px" onClick="controller.refresh()" />
你的controller中定义refresh()方法。
在refresh()方法中:
//获得你的tabbox对象
Tabbox tb = self.getFellowIfAny("tabbox");
然后对tb操作即可。
还不明白吗??
<button id="refreshButton" label="刷新" width="80px" onClick="controller.refresh()" />
你的controller中定义refresh()方法。
在refresh()方法中:
//获得你的tabbox对象
Tabbox tb = self.getFellowIfAny("tabbox");
然后对tb操作即可。
还不明白吗??
#17
你可以先试试更改下它的式样,你就知道了。
tb.setStyle("");
tb.setStyle("");
#18
你这边的self是从哪里得到的
#19
我是这样获取组件的Tabbox tbx = (Tabbox)Path.getComponent("/win/tabbox");是不是错了
#20
可是,你还是没有说怎么刷新这个组件,我就是卡在这里啊
#21
TO:我是这样获取组件的Tabbox tbx = (Tabbox)Path.getComponent("/win/tabbox");是不是错了
你要不在你的controller中定义
private Tabbox tbx;再添加getset方法。
tbx和你ZUL文件中Tabbox的ID一致即可。
tbx就是你的Tabbox对象,
操作完执行下:tbx.renderAll();
你要不在你的controller中定义
private Tabbox tbx;再添加getset方法。
tbx和你ZUL文件中Tabbox的ID一致即可。
tbx就是你的Tabbox对象,
操作完执行下:tbx.renderAll();
#22
我按照你说的试了一下,打印出来的tbx是null,而且tbx下也没有renderAll()这个方法
#23
说明你
<window id="payApplyPlanMgrWin" width="100%"
border="0" position="center,top" height="100%" apply="${testMgrController}">
这个绑定没成功。
<window id="payApplyPlanMgrWin" width="100%"
border="0" position="center,top" height="100%" apply="${testMgrController}">
这个绑定没成功。
#24
这个是绑定成功的,我其他功能都有走到后台
#25
是不是你的按钮和你的tabbox在不同的window里?
#26
都在同一個window里的
#27
贴代码吧,把ZUL和类都贴出来
#28
zul就是之前貼的那些了
zul:
<window id="win" title="for info query" width="100%" border="normal"
apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('com.xpx.mvc.info0001idquery.info0001idQueryViewModel')">
<grid>
<rows>
<row>
<div sclass="field-title">关键字</div>
<div>
<textbox value="@bind(vm.infoDO.id)" maxlength="50"/>
</div>
</row>
</rows>
</grid>
<button label="查詢" onClick="@command('Query')"/>
<tabbox id="tb" height="600px">
<tabs id="tabs">
<tab id="test01" label="資訊"/>
<tab id="test02" label="test02"/>
</tabs>
<tabpanels>
<tabpanel><include src="/mvc/test01Info/test01Info.zul"/></tabpanel>
<tabpanel><include src="/mvc/test02Info/test02Info.zul"/></tabpanel>
</tabpanels>
</tabbox>
info0001idQueryViewModel类:
private Tabbox tb;
public Tabbox getTb() {
return tb;
}
public void setTb(Tabbox tb) {
this.tb = tb;
}
@Command
@NotifyChange("*")
public void Query(){
String keyword = this.infoDO.getId();
this.infoDO.setId(keyword);
Sessions.getCurrent().setAttribute("infoDOSession", this.infoDO);
//刷新組件,这边要让得到的组件刷新,我这里实现不了,这部分需要你帮忙下,多谢
//Tabbox tbx = (Tabbox)Path.getComponent("/win/tb");//这里打印出的tbx是:<Tabbox fUIQ40#tb>
//System.out.println(tb+"******");//这里得到的组件是null
}
zul:
<window id="win" title="for info query" width="100%" border="normal"
apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('com.xpx.mvc.info0001idquery.info0001idQueryViewModel')">
<grid>
<rows>
<row>
<div sclass="field-title">关键字</div>
<div>
<textbox value="@bind(vm.infoDO.id)" maxlength="50"/>
</div>
</row>
</rows>
</grid>
<button label="查詢" onClick="@command('Query')"/>
<tabbox id="tb" height="600px">
<tabs id="tabs">
<tab id="test01" label="資訊"/>
<tab id="test02" label="test02"/>
</tabs>
<tabpanels>
<tabpanel><include src="/mvc/test01Info/test01Info.zul"/></tabpanel>
<tabpanel><include src="/mvc/test02Info/test02Info.zul"/></tabpanel>
</tabpanels>
</tabbox>
info0001idQueryViewModel类:
private Tabbox tb;
public Tabbox getTb() {
return tb;
}
public void setTb(Tabbox tb) {
this.tb = tb;
}
@Command
@NotifyChange("*")
public void Query(){
String keyword = this.infoDO.getId();
this.infoDO.setId(keyword);
Sessions.getCurrent().setAttribute("infoDOSession", this.infoDO);
//刷新組件,这边要让得到的组件刷新,我这里实现不了,这部分需要你帮忙下,多谢
//Tabbox tbx = (Tabbox)Path.getComponent("/win/tb");//这里打印出的tbx是:<Tabbox fUIQ40#tb>
//System.out.println(tb+"******");//这里得到的组件是null
}
#29
你试试这句看看页面刷新了没?
Tabbox tbx = (Tabbox)Path.getComponent("/win/tb");
Tab tt = (Tab) tbx.getFirstChild().getFirstChild();
tt.setLabel("测试测试");
Tabbox tbx = (Tabbox)Path.getComponent("/win/tb");
Tab tt = (Tab) tbx.getFirstChild().getFirstChild();
tt.setLabel("测试测试");
#30
你这只会另tab的标题更改了,但是里面include进来的window还是没刷新
#31
我终于明白了,你是想把
<tabpanel><include src="/mvc/test01Info/test01Info.zul"/></tabpanel>
这里的页面更新是吧?
这个我还没做过,
你试试(Window)self.getFellow("win")
获得你include页面的win对象,如果能获得这个对象,就好办了。
<tabpanel><include src="/mvc/test01Info/test01Info.zul"/></tabpanel>
这里的页面更新是吧?
这个我还没做过,
你试试(Window)self.getFellow("win")
获得你include页面的win对象,如果能获得这个对象,就好办了。
#32
我本意是想让整個tabbox单独更新,这样底下include的兩個window资料就能更新显示了。就算能得到win的对象,组件也没更新的方法吧
#33
Thanks!问题解决了,就像你说的,获得win对象
Include test01Inc = (Include) Path.getComponent("/win/test01win");
test01Inc.invalidate();
Include test01Inc = (Include) Path.getComponent("/win/test01win");
test01Inc.invalidate();
#34
多谢!!!!!!!!
#1
有没有人懂的,帮我一下
#2
自己顶下,哪个高手帮帮忙啊
#3
代码贴出来啊
#4
用ajax轮询吧
#5
怎么轮询,不懂啊
#6
<button label="查詢" onClick="@command('Query')"/>
<tabbox id="tb" height="600px">
<tabs id="tabs">
<tab id="test01" label="資訊"/>
<tab id="test02" label="test"/>
</tabs>
<tabpanels>
<tabpanel><include src="/mvc/test01Info/test01Info.zul"/></tabpanel>
<tabpanel><include src="/mvc/test0202Info/test02Info.zul"/></tabpanel>
</tabpanels>
</tabbox>
目前在Query方法里我把整个页面跳转回本页面,两个include进来的window才有值,我想实现不要跳转本页面,只刷新这个tabbox组件,有没有办法实现,各位帮帮忙啊
<tabbox id="tb" height="600px">
<tabs id="tabs">
<tab id="test01" label="資訊"/>
<tab id="test02" label="test"/>
</tabs>
<tabpanels>
<tabpanel><include src="/mvc/test01Info/test01Info.zul"/></tabpanel>
<tabpanel><include src="/mvc/test0202Info/test02Info.zul"/></tabpanel>
</tabpanels>
</tabbox>
目前在Query方法里我把整个页面跳转回本页面,两个include进来的window才有值,我想实现不要跳转本页面,只刷新这个tabbox组件,有没有办法实现,各位帮帮忙啊
#7
ZK后台你可以直接操作tabbox的。
在你的点击按钮事件中:
//获得tabbox对象
Tabbox tb = self.getFellowIfAny("tabbox");
//对tabbox进行操作
在你的点击按钮事件中:
//获得tabbox对象
Tabbox tb = self.getFellowIfAny("tabbox");
//对tabbox进行操作
#8
ZK是基于AJAX的,所有的操作都可以异步刷新。
后台对象操作,均可在页面中体现出。
后台对象操作,均可在页面中体现出。
#9
就是卡在對tabbox刷新的操作上,請問應該怎麼写,Thanks!
#10
能不能给我例子,这块的刚接触,很多都不懂
#11
ZK是我几个月前做的,现在大致看代码告诉你吧:
我这里用的是apply
<window id="payApplyPlanMgrWin" width="100%"
border="0" position="center,top" height="100%" apply="${testMgrController}">
<Tabbox id="yourtabbox">
</Tabbox>
<toolbarbutton label="测试" onClick="controller.myTest(self)"></toolbarbutton>
在你的TestMgrController类中,定义yourtabbox对象
然后在你的按钮单击事件myTest中就可以操作yourtabbox了,
yourtabbox应该有很多属性的,如:
//获得子对象集合
List<org.zkoss.zk.ui.Component> list = yourtabbox.getChildren();
//设置式样
yourtabbox.setStyle等等。
直接对yourtabbox这个对象操作即可。
我这里用的是apply
<window id="payApplyPlanMgrWin" width="100%"
border="0" position="center,top" height="100%" apply="${testMgrController}">
<Tabbox id="yourtabbox">
</Tabbox>
<toolbarbutton label="测试" onClick="controller.myTest(self)"></toolbarbutton>
在你的TestMgrController类中,定义yourtabbox对象
然后在你的按钮单击事件myTest中就可以操作yourtabbox了,
yourtabbox应该有很多属性的,如:
//获得子对象集合
List<org.zkoss.zk.ui.Component> list = yourtabbox.getChildren();
//设置式样
yourtabbox.setStyle等等。
直接对yourtabbox这个对象操作即可。
#12
总的来说就一句话,ZK页面的对象和你后台对象可以一一对应,
你对后台对象的操作,都可以体现到页面上。
感觉ZK做一些ERP类的应用还行,做网站类的就不行了,性能不好,封装的太多了。
你对后台对象的操作,都可以体现到页面上。
感觉ZK做一些ERP类的应用还行,做网站类的就不行了,性能不好,封装的太多了。
#13
能告诉我刷新这个组件的操作怎么写吗,我网上查了,用tabbox.invalidate();但是没反应
#14
你可以用个按钮点击事件来刷新tabbox啊,
我现在手头上没有环境,只能凭记忆告诉你。
tabbox可能也有点击的事件,不确定,
我现在手头上没有环境,只能凭记忆告诉你。
tabbox可能也有点击的事件,不确定,
#15
跟你说下我的问题吧,我现在的问题就是想在按钮点击事件中刷新这个tabbox,但不知道怎么来刷新它,也没找到刷新这个组件的方法
#16
这个是ZUL中的按钮+按钮的单击事件
<button id="refreshButton" label="刷新" width="80px" onClick="controller.refresh()" />
你的controller中定义refresh()方法。
在refresh()方法中:
//获得你的tabbox对象
Tabbox tb = self.getFellowIfAny("tabbox");
然后对tb操作即可。
还不明白吗??
<button id="refreshButton" label="刷新" width="80px" onClick="controller.refresh()" />
你的controller中定义refresh()方法。
在refresh()方法中:
//获得你的tabbox对象
Tabbox tb = self.getFellowIfAny("tabbox");
然后对tb操作即可。
还不明白吗??
#17
你可以先试试更改下它的式样,你就知道了。
tb.setStyle("");
tb.setStyle("");
#18
你这边的self是从哪里得到的
#19
我是这样获取组件的Tabbox tbx = (Tabbox)Path.getComponent("/win/tabbox");是不是错了
#20
可是,你还是没有说怎么刷新这个组件,我就是卡在这里啊
#21
TO:我是这样获取组件的Tabbox tbx = (Tabbox)Path.getComponent("/win/tabbox");是不是错了
你要不在你的controller中定义
private Tabbox tbx;再添加getset方法。
tbx和你ZUL文件中Tabbox的ID一致即可。
tbx就是你的Tabbox对象,
操作完执行下:tbx.renderAll();
你要不在你的controller中定义
private Tabbox tbx;再添加getset方法。
tbx和你ZUL文件中Tabbox的ID一致即可。
tbx就是你的Tabbox对象,
操作完执行下:tbx.renderAll();
#22
我按照你说的试了一下,打印出来的tbx是null,而且tbx下也没有renderAll()这个方法
#23
说明你
<window id="payApplyPlanMgrWin" width="100%"
border="0" position="center,top" height="100%" apply="${testMgrController}">
这个绑定没成功。
<window id="payApplyPlanMgrWin" width="100%"
border="0" position="center,top" height="100%" apply="${testMgrController}">
这个绑定没成功。
#24
这个是绑定成功的,我其他功能都有走到后台
#25
是不是你的按钮和你的tabbox在不同的window里?
#26
都在同一個window里的
#27
贴代码吧,把ZUL和类都贴出来
#28
zul就是之前貼的那些了
zul:
<window id="win" title="for info query" width="100%" border="normal"
apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('com.xpx.mvc.info0001idquery.info0001idQueryViewModel')">
<grid>
<rows>
<row>
<div sclass="field-title">关键字</div>
<div>
<textbox value="@bind(vm.infoDO.id)" maxlength="50"/>
</div>
</row>
</rows>
</grid>
<button label="查詢" onClick="@command('Query')"/>
<tabbox id="tb" height="600px">
<tabs id="tabs">
<tab id="test01" label="資訊"/>
<tab id="test02" label="test02"/>
</tabs>
<tabpanels>
<tabpanel><include src="/mvc/test01Info/test01Info.zul"/></tabpanel>
<tabpanel><include src="/mvc/test02Info/test02Info.zul"/></tabpanel>
</tabpanels>
</tabbox>
info0001idQueryViewModel类:
private Tabbox tb;
public Tabbox getTb() {
return tb;
}
public void setTb(Tabbox tb) {
this.tb = tb;
}
@Command
@NotifyChange("*")
public void Query(){
String keyword = this.infoDO.getId();
this.infoDO.setId(keyword);
Sessions.getCurrent().setAttribute("infoDOSession", this.infoDO);
//刷新組件,这边要让得到的组件刷新,我这里实现不了,这部分需要你帮忙下,多谢
//Tabbox tbx = (Tabbox)Path.getComponent("/win/tb");//这里打印出的tbx是:<Tabbox fUIQ40#tb>
//System.out.println(tb+"******");//这里得到的组件是null
}
zul:
<window id="win" title="for info query" width="100%" border="normal"
apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('com.xpx.mvc.info0001idquery.info0001idQueryViewModel')">
<grid>
<rows>
<row>
<div sclass="field-title">关键字</div>
<div>
<textbox value="@bind(vm.infoDO.id)" maxlength="50"/>
</div>
</row>
</rows>
</grid>
<button label="查詢" onClick="@command('Query')"/>
<tabbox id="tb" height="600px">
<tabs id="tabs">
<tab id="test01" label="資訊"/>
<tab id="test02" label="test02"/>
</tabs>
<tabpanels>
<tabpanel><include src="/mvc/test01Info/test01Info.zul"/></tabpanel>
<tabpanel><include src="/mvc/test02Info/test02Info.zul"/></tabpanel>
</tabpanels>
</tabbox>
info0001idQueryViewModel类:
private Tabbox tb;
public Tabbox getTb() {
return tb;
}
public void setTb(Tabbox tb) {
this.tb = tb;
}
@Command
@NotifyChange("*")
public void Query(){
String keyword = this.infoDO.getId();
this.infoDO.setId(keyword);
Sessions.getCurrent().setAttribute("infoDOSession", this.infoDO);
//刷新組件,这边要让得到的组件刷新,我这里实现不了,这部分需要你帮忙下,多谢
//Tabbox tbx = (Tabbox)Path.getComponent("/win/tb");//这里打印出的tbx是:<Tabbox fUIQ40#tb>
//System.out.println(tb+"******");//这里得到的组件是null
}
#29
你试试这句看看页面刷新了没?
Tabbox tbx = (Tabbox)Path.getComponent("/win/tb");
Tab tt = (Tab) tbx.getFirstChild().getFirstChild();
tt.setLabel("测试测试");
Tabbox tbx = (Tabbox)Path.getComponent("/win/tb");
Tab tt = (Tab) tbx.getFirstChild().getFirstChild();
tt.setLabel("测试测试");
#30
你这只会另tab的标题更改了,但是里面include进来的window还是没刷新
#31
我终于明白了,你是想把
<tabpanel><include src="/mvc/test01Info/test01Info.zul"/></tabpanel>
这里的页面更新是吧?
这个我还没做过,
你试试(Window)self.getFellow("win")
获得你include页面的win对象,如果能获得这个对象,就好办了。
<tabpanel><include src="/mvc/test01Info/test01Info.zul"/></tabpanel>
这里的页面更新是吧?
这个我还没做过,
你试试(Window)self.getFellow("win")
获得你include页面的win对象,如果能获得这个对象,就好办了。
#32
我本意是想让整個tabbox单独更新,这样底下include的兩個window资料就能更新显示了。就算能得到win的对象,组件也没更新的方法吧
#33
Thanks!问题解决了,就像你说的,获得win对象
Include test01Inc = (Include) Path.getComponent("/win/test01win");
test01Inc.invalidate();
Include test01Inc = (Include) Path.getComponent("/win/test01win");
test01Inc.invalidate();
#34
多谢!!!!!!!!