-
FEATURED COMPONENTS
First time here? Check out the FAQ!
Hello there,
i have trouble passing parameters between one zul-Page and another.
Let's say, i have the zul-Pages a.zul and b.zul and corresponding composers (extending GenericForwardComposer) A.java and B.java.
a.zul contains a button
<button id="login" />
, the corresponding onClick-Method in Composer A.java looks like this
public void onClick$login(Event event)
{
execution.setAttribute("testkey", "testval");
String testAttribute = (String) execution.getAttribute("testkey");
System.out.println("testAttribute before redirect: " + testAttribute);
execution.sendRedirect("b.zul");
}
The attribute is logged correctly, also page b.zul is loaded.
In Composer B.java the doAfterCompose-Method looks like this:
@Override
public void doAfterCompose(Component comp) throws Exception
{
super.doAfterCompose(comp);
String testAttribute = (String) ((HttpServletRequest) execution
.getNativeRequest()).getAttribute("testkey");
System.out.println("testAttribute after redirect(getAttribute): "
+ testAttribute);
testAttribute = (String) ((HttpServletRequest) execution
.getNativeRequest()).getParameter("testkey");
System.out.println("testAttribute after redirect(getParameter): "
+ testAttribute);
testAttribute = (String) execution.getAttribute("testkey");
System.out
.println("testAttribute after redirect(execution.getAttribute): "
+ testAttribute);
testAttribute = (String) execution.getParameter("testkey");
System.out
.println("testAttribute after redirect(execution.getParameter): "
+ testAttribute);
}
All the values printed here are null.
If i use
session.setAttribute("testkey", "testval");
and
String testAttribute = (String) session.getAttribute("testkey");
the attribute is retrieved correctly.
What the hack am i missing?
I don't want to use the session scope for passing parameters.
Thanks for your help!
(ZK Version is 3.6.0)
take a look at the search function here in the forum:
Search for "passing param"
You'll find many threads and tricks.
Stephan
@terrytornado:
Be sure that I already did that. Based on the search result i created the code mentioned above.
Is there an obvioous mistake/misunderstanding that i'm too blind too see? If so, would you please tell me?
Else, your post is not too helpful...
Thanks anyway.
OK, i found this quote:
If "Executions.sendRedirect() ... is fired, the previous request no longer exists, so you cannot get the attribute saved in the previous request."
Can somebody state that this is true?
So, the next bigger scope to store parameters for inter-zul-page communication is the session scope if you don't want to put parameters in the URL (so that the beaviour is like submitting a form with method="POST").
@kasperlcurtis
I can only read for me. At i'm begin with zkoss i have a very helpful Skype call with
hne that helps me to understand how it's all stick together.
In this call he sends me code for a BaseControler and code fragments for passing params.
With this in mind i have at no times problems to access params from other zul-files because
i'm overhanded not only a param, if needed i overhanded the whole controller object.
The mainly class is the BaseController, he does the work in background.
There are code for a whole module Listbox (onDoubleClick)--> dialog (workWithParams) (changesMadeVisibleToUnderlayingListbox)
Take a look on it here
. Perhaps it can be helpfull.
regards
Stephan
@terrytornado.
HI.. terrytornado.
for your help to solve my problem. Actually I want to say you that either the link is dead or removed to some where else, so IF possible for you to send me the code which you had used to solve problems to pass parameter..
thanx.
@terrytornado.
thanx for your help but my problem still not solved and it throws me another error.
Failed to assign [id=retailers_win] to <Window z_fnr_r7> Not unique in ID space [Page tra]: retailers_win
my filter_bar.zul page is
<window border="normal" id="filter_bar" class="main_bg" apply="${baseController}"> <div class="textalign1" style="height:30px;"> <div style="float:left;" class="style_a5 select_service"></div> <div class="textalign2 combo"> Brand :<listbox id="lbox_service" width="120px" mold="select" multiple="false" rows="1"> <listitem self="@{each=each1}" label="@{each1.serviceName}" value="@{each1.serviceId}"/> </listbox> </div> <div class="style_a5 select_service2" style="margin-left:35px;" ></div> <div style="float:left; margin-left:5px;"> <div id="div_seasons" class="combo"> Season :<listbox id="lbox_season" width="120px" mold="select" multiple="false" rows="1" > <listitem self="@{each=each1}" label="@{each1.season}" value="@{each1.seasonId}" /> </listbox> </div> </div> <div class="style_a5 select_service2" style="margin-left:35px;" ></div> <div style="float:left; margin-left:5px;"> <div id="div_refresh"> Period :<textbox id="period1"></textbox> <button id="ref" label="Ref"></button> </div> </div> <div class="style_a5 select_service2" style="margin-left:35px;" ></div> <div style="float:left; margin-left:5px;"> <div class="combo"> Month From :<listbox id="monthFrom" width="120px" mold="select" multiple="false" rows="1"> </listbox> Year From :<listbox id="yearFrom" width="120px" mold="select" multiple="false" rows="1" > </listbox> Month To :<listbox id="monthTo" width="120px" mold="select" multiple="false" rows="1" > </listbox> Year To :<listbox id="yearTo" width="120px" mold="select" multiple="false" rows="1" > </listbox> </div> </div> </div> </window>
and the controller for the filter_bar.zul is baseController.java that has on onClick$ref that will get the value from my filter bar and that has a code
public void onClick$ref(Event event){ //this.setPeriod(); final Map<String, Object> map = new HashMap<String, Object>(0); map.put("service_id",this.getService_id() ); map.put("season_id", this.getSeason_id() ); final Window win = (Window)Executions.createComponents("tradition.zul", null, map); }
and then my tradition.zul page load that has having controller Traditional_retailers
<zk> <?page id="tra" title="Traditional" contentType="text/html;charset=UTF-8"?> <?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" arg0="retailers_win"?> <?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?> <include src="filter_bar.zul" /> <window border="normal" id="retailers_win" class="main_bg" apply="${traditionalRetailer1}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd"> <div id="product_table" align="left" width="100%" height="100%"> <listbox id="retailer" fixedLayout="true" model="@{controller.TDRetailers}" > <attribute name="onSelect"> <![CDATA[ Messagebox.show(self.getSelectedItem().getChildren().get(0).getLabel()); //Messagebox.show("Selected Value : " + self.getSelectedItem().getLabel()+", "+ self.getSelectedItem().getChildren().get(2).getLabel()); ]]> </attribute> <listhead> <listheader label="Store Name" width="18%" align="left" /> <listheader label="Country" width="14%" align="left"/> <listheader label="City" width="14%" align="left"/> <listheader label="Auth. OK" width="10%" align="center"/> <listheader label="Info. OK" width="10%" align="center"/> <listheader label="Auth. KO" width="10%" align="center"/> <listheader label="Info. KO" width="10%" align="center"/> <listheader label="Auth. Fakes" width="10%" align="center"/> <listheader label="Unq. Invalid" width="10%" align="center"/> </listhead> <listitem self="@{each=each1}" > <listcell visible="false" label="@{each1.verification_store_id}"></listcell> <listcell label="@{each1.store_name}" /> <listcell label="@{each1.country}" /> <listcell label="@{each1.city_name}" /> <listcell label="@{each1.auth_ok}" /> <listcell label="@{each1.info_ok}" /> <listcell label="@{each1.auth_ko}" /> <listcell label="@{each1.info_ko}" /> <listcell label="@{each1.auth_fakes}" /> <listcell label="@{each1.unique_invalid}" /> </listitem> </listbox> <label value="${args.service_id}"></label> <label value="${args.season_id}"></label> <button id="REFRESH" label="REFRESH"></button> </div> </window> </zk>
my traditional_retailer.java file having doAfterCompose code is below
@Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); EventQueues.lookup("myEventQueue", EventQueues.DESKTOP, true) .subscribe(new EventListener() { public void onEvent(Event event) throws Exception { /*String service = (String) event.getData(); logger.info("Servive $$$$$$$$$ " + service); //String season = (String) event.getData(); //logger.info("Season $$$$$$$$$ " + season);*/ /*if("service_id".equals(event.getName())) { System.out.println("service_id_select :" +event.getData()); setService_id((String) event.getData()); baseController.setFilterChanged("true"); System.out.println("Service Id :" +event.getData()); }*/ if("season_id".equals(event.getName())) { setSeason_id((String) event.getData()); baseController.setFilterChanged("true"); System.out.println("Season Id :" +event.getData()); } logger.info("filter change : " +baseController.getFilterChanged()); if(baseController.getFilterChanged().equals("true")) { String order = "2"; List TDRetailers = verificationStoreHibernateDao.getTraditionalRetailers(getService_id(), getSeason_id(),dateFrom, dateTo, order); //VerificationStoreHibernateDao storeHibernateDao = new VerificationStoreHibernateDao(); //List TDRetailers = this.verificationStoreHibernateDao.getTraditionalRetailers(service_id); //ListModel listModel = this.retailers.getModel(); ListModelList listModelList = (ListModelList) retailer.getModel(); listModelList.clear(); listModelList.addAll(TDRetailers); } } }); /*.subscribe(new EventListener(){ public void onEvent(Event event) throws Exception { setMsg((String) event.getData()); service.setValue(msg); } }); EventQueues.lookup("myEventQu", EventQueues.DESKTOP, true) .subscribe(new EventListener(){ public void onEvent(Event event) throws Exception { //baseController.setSeason_id((String) event.getData()); //msg1 =(String) event.getData(); setMsg1((String) event.getData()); season.setValue(msg1); } });*/ }
but when i Click the refresh button it show's me the error
Failed to assign [id=retailers_win] to <Window z_fnr_r7> Not unique in ID space [Page tra]: retailers_win
and also I think that
Executions.createComponents("tradition.zul", null, map);
is for creating a new component.
What's there the problem in my code.??
help me to solve this error
Best Regards
Yogendra
Hi Yogendra,
show us the code from the methode that the Button with id="REFRESH" are calling.
@terrytornado
thanx for your support
my referesh BUTTON CODE IS given below and whose declaration is in my basecontroller controller
public void onClick$ref(Event event){ //this.setPeriod(); final Map<String, Object> map = new HashMap<String, Object>(0); map.put("service_id",this.getService_id() ); map.put("season_id", this.getSeason_id() ); final Window win = (Window)Executions.createComponents("tradition.zul", null, map); }
when user click the refresh button the map will take the service_id and season_id value and pass the param to tradition.zul page
it calls the doAfterCompose method to get the params value passed from the refresh button click event.
@Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); EventQueues.lookup("myEventQueue", EventQueues.DESKTOP, true) .subscribe(new EventListener() { public void onEvent(Event event) throws Exception { /*String service = (String) event.getData(); logger.info("Servive $$$$$$$$$ " + service); //String season = (String) event.getData(); //logger.info("Season $$$$$$$$$ " + season);*/ /*if("service_id".equals(event.getName())) { System.out.println("service_id_select :" +event.getData()); setService_id((String) event.getData()); baseController.setFilterChanged("true"); System.out.println("Service Id :" +event.getData()); }*/ if("season_id".equals(event.getName())) { setSeason_id((String) event.getData()); baseController.setFilterChanged("true"); System.out.println("Season Id :" +event.getData()); } logger.info("filter change : " +baseController.getFilterChanged()); if(baseController.getFilterChanged().equals("true")) { String order = "2"; List TDRetailers = verificationStoreHibernateDao.getTraditionalRetailers(getService_id(), getSeason_id(),dateFrom, dateTo, order); //VerificationStoreHibernateDao storeHibernateDao = new VerificationStoreHibernateDao(); //List TDRetailers = this.verificationStoreHibernateDao.getTraditionalRetailers(service_id); //ListModel listModel = this.retailers.getModel(); ListModelList listModelList = (ListModelList) retailer.getModel(); listModelList.clear(); listModelList.addAll(TDRetailers); } } });
if not able to understand is it the right way to get values passed from one zul to another zul page. And when I execute the page it shows me
Failed to assign [id=retailers_win] to <Window z_fnr_r7> Not unique in ID space [Page tra]: retailers_win
Is the 'retailers_win' a modal window?
1. If not you must be sure that the window is closed ( winName.detach() ) before you create it new.
2. You can call a method in the allready created Window which handles your stuff.
not tested code
composer.java
. . . // InstanzVar private Window winRetailer; public void onClick$ref(Event event){ //this.setPeriod(); final Map<String, Object> map = new HashMap<String, Object>(0); map.put("service_id",this.getService_id() ); map.put("season_id", this.getSeason_id() ); if (winRetailer != null ) { winRetailer = (Window) Executions.createComponents("tradition.zul", null, map); } else { winRetailer.callAMethodWhichWillHandleYourStuff( map ); }
best
Stephan
Asked: 2009-05-14 15:10:33 +0800
Seen: 2,778 times
Last updated: Mar 03 '11