-
FEATURED COMPONENTS
First time here? Check out the FAQ!
Hope that my problems will be solved by zk warriors.
Actually I had a sellerList.zul page in that values come from the database which contains SQL QUERY TO be executed and then I get the values in my sellerList.zul listbox.
my sellerList.zul page is
<?xml version="1.0" encoding="UTF-8"?> <zk xmlns="http://www.zkoss.org/2005/zul"> <style src="/css/style.css" /> <?page id="seller" title="Certilogo ECC" ?> <?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" ?> <?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?> <window border="normal" id="sellerWindow" class="main_bg" apply="${internetSeller}" xmlns:h="http://www.w3.org/1999/xhtml" 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"> <h:form id="form" name="form" method="POST"> <div style="width:1000px;margin: 0 auto" > <include src="page_header.zul" /> <div style="clear:both;" align="center"> <div class="left"> <include src="left_menu.zul" /> </div> <div class="right"> <!-- FIRST HEADING STARTS HERE --> <div align="left"> <div><label value="FRAUD DETECTION"></label> / <label value="TRADITIONAL RETAILES"></label></div> </div> <!-- Filter Bar will be included here --> <!-- SECOND HEADING STARTS HERE --> <include src="filter_bar2.zul" /> <div id="update_section" > <div id="index_area"> <div id="product_table" align="left" width="100%" > <listbox id="sellerList" multiple="false" width="100%" height="100%"> <listhead> <listheader visible="false"/> <listheader label="Seller Name" width="18%" align="left" sort="auto" /> <listheader label="Auctions" width="14%" align="left" sort="auto"/> <listheader label="Active Actions" width="14%" align="left" sort="auto"/> <listheader label="Sold" width="10%" align="center"/> <listheader label="Auth. OK" width="10%" align="center"/> <listheader label="Auth. KO" width="10%" align="center"/> <listheader label="Info. OK" width="10%" align="center"/> <listheader label="Info. KO" width="10%" align="center"/> <listheader label="Invalid" width="10%" align="center"/> <listheader label="Fakes" width="10%" align="center"/> <listheader label="Pre. Auth" width="10%" align="center"/> </listhead> </listbox> <separator height="10px"></separator> </div> <button id="exportExcel" label="Export Excel" onClick="sellerWindow$composer.generate();"/> </div> </div> </div> </div> <div style="clear:both;" align="center"> <include src="page_footer.zul" /> </div> </div> </h:form> </window> </zk>
and my InternetSeller Controller is
public class InternetSeller extends BaseController2 implements ListitemRenderer{ /** * */ private static final long serialVersionUID = 1L; protected InternetHibernateDao internetServiceDao = new InternetHibernateDao(); /** * @return the internetServiceDao */ public InternetHibernateDao getInternetServiceDao() { return internetServiceDao; } /** * @param internetServiceDao the internetServiceDao to set */ public void setInternetServiceDao(InternetHibernateDao internetServiceDao) { this.internetServiceDao = internetServiceDao; } private String Dateto =""; private String Datefrom = ""; //Listbox for displaying Seller list protected Listbox sellerList; //ListModelList to modelList of Seler available protected ListModelList listModelList = new ListModelList(); //Listheader value for seller name protected Listheader seller_name; private List internetSellerList = new ArrayList(); /** * @return the internetSellerList */ public List getInternetSellerList() { return internetSellerList; } /** * @param internetSellerList the internetSellerList to set */ public void setInternetSellerList(List internetSellerList) { this.internetSellerList = internetSellerList; } private long totalRecords = 0; /** * @return the dateto */ public String getDateto() { return Dateto; } /** * @return the datefrom */ public String getDatefrom() { return Datefrom; } /** * @param dateto the dateto to set */ public void setDateto(String dateto) { Dateto = dateto; } /** * @param datefrom the datefrom to set */ public void setDatefrom(String datefrom) { Datefrom = datefrom; } @Override public void doAfterCompose(Component comp) throws Exception { // TODO Auto-generated method stub super.doAfterCompose(comp); /*book = report.getBook(); reportSheet = book.getWorksheet("ReportSheet"); final Worksheet templateSheet = book.getWorksheet("TemplateSheet"); templateRange = Ranges.range(templateSheet,"template"); offset = ((Number)Ranges.range(templateSheet,"offset").getValue()).intValue();*/ if(this.getFilterChanged().equals("true")) { logger.info("FILTER CHANGED"); logger.info("date entered :"+ this.getyFrom() + "/"+this.getmFrom()+"/"+this.getyTo()+"/"+this.getmTo()); Datefrom = this.getyFrom() + "-" + this.getmFrom() + "-1"; int month = Integer.parseInt(this.getmTo() +1); if(month > 12) { int year = Integer.parseInt(this.getyTo() +1); Dateto = year + "-1-1"; } else { Dateto = this.getyTo() + "-" + (month) + "-1"; } } else { logger.info("FILTER not CHANGED"); Calendar now = Calendar.getInstance(); Dateto = now.get(Calendar.YEAR) + "-" + (now.get(Calendar.MONTH) +1) + "-" + now.get(Calendar.DATE); now.add(Calendar.YEAR, -1); Datefrom = now.get(Calendar.YEAR) + "-" + (now.get(Calendar.MONTH) +1) + "-" +now.get(Calendar.DATE); this.setyFrom(String.valueOf(now.get(Calendar.YEAR))); this.setmFrom(String.valueOf(now.get(Calendar.MONTH) +1)); } this.setPeriod_value(""); this.setInternetSellerList(); } private void setInternetSellerList() { // TODO Auto-generated method stub logger.info("service id before"+this.getService_id()); if(this.getService_id().equals("0")) { this.setService_id(this.getService_id()); } logger.info("service id after"+this.getService_id()); //this.totalRecords = this.internetServiceDao.getSellerList(this.getService_id(),this.getSeason(),Datefrom,Dateto).size(); this.setInternetSellerList(this.internetServiceDao.getSellerList(this.getService_id(),this.getSeason(),this.getDateFrom(),this.getDateTo())); listModelList.addAll(getInternetSellerList()); sellerList.setModel(listModelList); sellerList.setItemRenderer(this); //sellerList.addEventListener("onSelect", arg1) //seller_name.setSortAscending(new FieldComparator("me_seller_name",true)); //seller_name.setSortAscending(new FieldComparator("me_seller_name",false)); //seller_name.setSortAscending(new FieldComparator("clg_seller_id", true)); } /** * @return the sellerList */ public Listbox getSellerList() { return sellerList; } /** * @param sellerList the sellerList to set */ public void setSellerList(Listbox sellerList) { this.sellerList = sellerList; } public void render(Listitem listItem, Object data) throws Exception { // TODO Auto-generated method stub Map map = (Map) data; new Listcell(map.get("clg_seller_id").toString()).setParent(listItem); new Listcell(map.get("me_seller_name").toString()).setParent(listItem); new Listcell(map.get("auctions").toString()).setParent(listItem); new Listcell(map.get("active_auctions").toString()).setParent(listItem); new Listcell(map.get("sold").toString()).setParent(listItem); new Listcell(map.get("auth_ok").toString()).setParent(listItem); new Listcell(map.get("auth_ko").toString()).setParent(listItem); new Listcell(map.get("info_ok").toString()).setParent(listItem); new Listcell(map.get("info_ko").toString()).setParent(listItem); new Listcell(map.get("invalid").toString()).setParent(listItem); new Listcell(map.get("perc_fakes").toString()).setParent(listItem); new Listcell(map.get("pre_auth").toString()).setParent(listItem); }
this.setInternetSellerList(this.internetServiceDao.getSellerList(this.getService_id(),this.getSeason(),this.getDateFrom(),this.getDateTo()));
Query Code given below
SQL_QUERY = "select eo.me_id as clg_seller_id, eo.me_seller_name, " + "(select count(distinct eo1.offer_id) " + "from ecc_offer eo1 " + "where eo1.me_id = eo.me_id " + "and eo1.me_seller_name = eo.me_seller_name) as auctions, " + "(select sum(case when end_date>sysdate then 1 else 0 end) " + "from ecc_offer eo1 " + "where eo1.me_id = eo.me_id " + "and eo1.me_seller_name = eo.me_seller_name) as active_auctions, " + "(select sum(eo2.sold) " + "from ecc_offer eo2 " + "where eo2.me_id = eo.me_id " + "and eo2.me_seller_name = eo.me_seller_name) as sold, " + "sum(case when (va.answer = 1 or va.answer = 3) and (v.code_check_result = 1 or v.code_check_result = 2) then 1 else 0 end) as auth_ok, " + "sum(case when (va.answer = 1 or va.answer = 3) and v.code_check_result = 3 then 1 else 0 end) as auth_ko, " + "sum(case when(va.answer = 2 or v.interrogation_type = 3 or v.interrogation_type = 4) and (v.code_check_result = 1 or v.code_check_result = 2) then 1 else 0 end) as info_ok, " + "sum(case when (va.answer = 2 or v.interrogation_type = 3 or v.interrogation_type = 4) and v.code_check_result = 3 then 1 else 0 end) as info_ko, " + "sum(case when v.serial_number is null and v.interrogation_type is null and v.verification_id is not null then 1 else 0 end) as invalid, " + " decode (sum(case when (va.answer = '1' or va.answer = '3') and v.code_check_result>0 then 1 else 0 end),0,0,round(((sum(case when v.code_check_result = 3 and (va.answer = '1' or va.answer = '3') then 1 else 0 end) + (sum(case when v.serial_number is null and v.interrogation_type = 0 then 1 else 0 end))) " + " / sum(case when (va.answer = '1' or va.answer = '3') and v.code_check_result>0 then 1 else 0 end))*100)) as auth_fakes, " + "sum(case when v.interrogation_type = 1 or v.interrogation_type = 2 then 1 else 0 end) as pre_auth " + "from ecc_offer eo " + // "inner join ecc_seller_identities esi on eo.me_id = esi.me_id and eo.me_seller_name = esi.me_seller_name " + "left join verification v on eo.me_id = v.me_id and eo.offer_id = v.offer_id " + "left join verification_answer va on v.verification_id = va.verification_id and question_id = 1 " + "left join verification_code_details vcd on vcd.serial_number = v.serial_number "; //"and v.service_id in("+service_Id+") " + if(!service_Id.equals("") && !service_Id.equals("0")) { SQL_QUERY += "and v.service_id in (" +service_Id+ ")"; } else { SQL_QUERY += " and v.service_id in(10,14,15,16,17,21,22,23,26) "; } SQL_QUERY += "and eo.me_id = 2 "; /*"group by eo.me_id, eo.me_seller_name " + "having count(v.verification_id) > 0 " + "order by 3 desc ";*/ if(!season_id.equals("") && !season_id.equals("0")){ SQL_QUERY +=" and vcd.season_id = '"+season_id+"'"; } if(DateFrom != "" && Dateto != ""){ SQL_QUERY +=" and eo.end_date between TO_DATE('"+DateFrom+"','YYYY-MM-DD') and" + " TO_DATE('"+Dateto+"','YYYY-MM-DD') " ; } SQL_QUERY +="group by eo.me_id, eo.me_seller_name " + "having count(v.verification_id) > 0 "; SQL_QUERY +=" order by " + 2 + " "; //javax.persistence.Query query = entityManager.createQuery(SQL_QUERY); System.out.println(SQL_QUERY); Query query = entityManager.createNativeQuery(SQL_QUERY); //System.out.println(query); List imSellers = new ArrayList<HashMap>(); List tempList = query.getResultList(); if(tempList.size() > 0) { for(int i1 = 0; i1 < tempList.size(); i1++) { HashMap objHashMap = new HashMap(); Object[] row = (Object [] ) tempList.get(i1); objHashMap.put("clg_seller_id", row[0]); objHashMap.put("me_seller_name", row[1]); objHashMap.put("auctions", row[2]); objHashMap.put("active_auctions", row[3]); objHashMap.put("sold", row[4]); objHashMap.put("auth_ok", row[5]); objHashMap.put("auth_ko", row[6]); objHashMap.put("info_ok", row[7]); objHashMap.put("info_ko", row[8]); objHashMap.put("invalid", row[9]); objHashMap.put("perc_fakes", row[10]); objHashMap.put("pre_auth", row[11]); imSellers.add(objHashMap); } }
just help me that the value I get in my listbox to be get sorted when I click to their header.
I am using Spring with JPA so, I know that we can make use of FieldComparator as per Terrytornado view.
Help me to solve my problem.
Best Regards
Yogendra
Hi Yogendra,
Since you are using a model to populate your listbox, the sorting will need to be done at the model level, not the display. It requires some extra coding. This is something that I think ZK can improve upon.
Here is a good starting point to understand how it works:
http://books.zkoss.org/wiki/ZK_Component_Reference/Data/Listbox#Sorting
Hope it helps.
-JJ
@ jj
can you please help me to know that I am having a Map values which I had add to my listbox listcell using renderer having code below
Map map = (Map) data; new Listcell(map.get("clg_seller_id").toString()).setParent(listItem); new Listcell(map.get("me_seller_name").toString()).setParent(listItem); new Listcell(map.get("auctions").toString()).setParent(listItem); new Listcell(map.get("active_auctions").toString()).setParent(listItem); new Listcell(map.get("sold").toString()).setParent(listItem); new Listcell(map.get("auth_ok").toString()).setParent(listItem); new Listcell(map.get("auth_ko").toString()).setParent(listItem); new Listcell(map.get("info_ok").toString()).setParent(listItem); new Listcell(map.get("info_ko").toString()).setParent(listItem); new Listcell(map.get("invalid").toString()).setParent(listItem); new Listcell(map.get("perc_fakes").toString()).setParent(listItem); new Listcell(map.get("pre_auth").toString()).setParent(listItem);
so to display them in my zul page now I want to do sorting on them so How can I do this. As I am having a Map value in my zul page so it's going to give me java.util.HashMap cannot be cast to java.lang.Comparable.
How this problem will we resolved.
Best Regards
Yogendra
@ jj
Can you do me one favour . . Can you can plz post the source code ? Using that I will try to solve my problem as I had all my values in map.
I found the error always. .
Do me this help.
Best Regards
Yogendra
Hi Yogendra,
ZK didn't support Map sort
You can use array sort
<zk> <zscript><![CDATA[ import org.zkoss.zul.*; Object[][] data = new Object[][] { new Object[] {"Tom", 30}, new Object[] {"John", 28}, new Object[] {"Bill", 28}, new Object[] {"Carey", 28}, new Object[] {"Jean", 25} }; ListModelList model = new ListModelList(data); ListitemRenderer renderer = new ListitemRenderer() { public void render(Listitem item, Object data) throws Exception { Object[] o = (Object[]) data; item.appendChild(new Listcell(o[0].toString())); item.appendChild(new Listcell(o[1].toString())); } }; ]]></zscript> <listbox model="${model}" itemRenderer="${renderer}"> <listhead> <listheader label="name" sort="auto(0)"/> <listheader label="age" sort="auto(1)"/> </listhead> </listbox> </zk>
if you have to put the map model, you have to define your Comparator,
and set to each header.
@as1225
thanx for your reply. but still one more problem with implementing you source code. Actually my data are coming from multiple database table using a Sql query, and I am separating those values using Hashmap. by using below code
SQL_QUERY = "select eo.me_id as clg_seller_id, eo.me_seller_name, " + "(select count(distinct eo1.offer_id) " + "from ecc_offer eo1 " + "where eo1.me_id = eo.me_id " + "and eo1.me_seller_name = eo.me_seller_name) as auctions, " + "(select sum(case when end_date>sysdate then 1 else 0 end) " + "from ecc_offer eo1 " + "where eo1.me_id = eo.me_id " + "and eo1.me_seller_name = eo.me_seller_name) as active_auctions, " + "(select sum(eo2.sold) " + "from ecc_offer eo2 " + "where eo2.me_id = eo.me_id " + "and eo2.me_seller_name = eo.me_seller_name) as sold, " + "sum(case when (va.answer = 1 or va.answer = 3) and (v.code_check_result = 1 or v.code_check_result = 2) then 1 else 0 end) as auth_ok, " + "sum(case when (va.answer = 1 or va.answer = 3) and v.code_check_result = 3 then 1 else 0 end) as auth_ko, " + "sum(case when(va.answer = 2 or v.interrogation_type = 3 or v.interrogation_type = 4) and (v.code_check_result = 1 or v.code_check_result = 2) then 1 else 0 end) as info_ok, " + "sum(case when (va.answer = 2 or v.interrogation_type = 3 or v.interrogation_type = 4) and v.code_check_result = 3 then 1 else 0 end) as info_ko, " + "sum(case when v.serial_number is null and v.interrogation_type is null and v.verification_id is not null then 1 else 0 end) as invalid, " + " decode (sum(case when (va.answer = '1' or va.answer = '3') and v.code_check_result>0 then 1 else 0 end),0,0,round(((sum(case when v.code_check_result = 3 and (va.answer = '1' or va.answer = '3') then 1 else 0 end) + (sum(case when v.serial_number is null and v.interrogation_type = 0 then 1 else 0 end))) " + " / sum(case when (va.answer = '1' or va.answer = '3') and v.code_check_result>0 then 1 else 0 end))*100)) as auth_fakes, " + "sum(case when v.interrogation_type = 1 or v.interrogation_type = 2 then 1 else 0 end) as pre_auth " + "from ecc_offer eo " + // "inner join ecc_seller_identities esi on eo.me_id = esi.me_id and eo.me_seller_name = esi.me_seller_name " + "left join verification v on eo.me_id = v.me_id and eo.offer_id = v.offer_id " + "left join verification_answer va on v.verification_id = va.verification_id and question_id = 1 " + "left join verification_code_details vcd on vcd.serial_number = v.serial_number "; //"and v.service_id in("+service_Id+") " + if(!service_Id.equals("") && !service_Id.equals("0")) { SQL_QUERY += "and v.service_id in (" +service_Id+ ")"; } else { SQL_QUERY += " and v.service_id in(10,14,15,16,17,21,22,23,26) "; } SQL_QUERY += "and eo.me_id = 2 "; /*"group by eo.me_id, eo.me_seller_name " + "having count(v.verification_id) > 0 " + "order by 3 desc ";*/ if(!season_id.equals("") && !season_id.equals("0")){ SQL_QUERY +=" and vcd.season_id = '"+season_id+"'"; } if(DateFrom != "" && Dateto != ""){ SQL_QUERY +=" and eo.end_date between TO_DATE('"+DateFrom+"','YYYY-MM-DD') and" + " TO_DATE('"+Dateto+"','YYYY-MM-DD') " ; } SQL_QUERY +="group by eo.me_id, eo.me_seller_name " + "having count(v.verification_id) > 0 "; SQL_QUERY +=" order by " + 2 + " "; //javax.persistence.Query query = entityManager.createQuery(SQL_QUERY); System.out.println(SQL_QUERY); Query query = entityManager.createNativeQuery(SQL_QUERY); //System.out.println(query); List imSellers = new ArrayList<HashMap>(); List tempList = query.getResultList(); if(tempList.size() > 0) { for(int i1 = 0; i1 < tempList.size(); i1++) { HashMap objHashMap = new HashMap(); Object[] row = (Object [] ) tempList.get(i1); objHashMap.put("clg_seller_id", row[0]); objHashMap.put("me_seller_name", row[1]); objHashMap.put("auctions", row[2]); objHashMap.put("active_auctions", row[3]); objHashMap.put("sold", row[4]); objHashMap.put("auth_ok", row[5]); objHashMap.put("auth_ko", row[6]); objHashMap.put("info_ok", row[7]); objHashMap.put("info_ko", row[8]); objHashMap.put("invalid", row[9]); objHashMap.put("perc_fakes", row[10]); objHashMap.put("pre_auth", row[11]); imSellers.add(objHashMap); } }
so when I tried to implement your code it gives me HashMap cannot be cast to Object error.. My error stack trace is given below
] Servlet.service() for servlet zkLoader threw exception java.lang.ClassCastException: java.util.HashMap cannot be cast to [Ljava.lang.Object; at com.certilogo.ecc.frontend.InternetSeller.render(InternetSeller.java:266) at org.zkoss.zul.Listbox$Renderer.render(Listbox.java:2731) at org.zkoss.zul.Listbox.onInitRender(Listbox.java:2664)
so if possible can you help me to do solve my problem with this.
Best Regards
Yogendra
@as1225
thanks for support but i m having some problem while executing your above code.
when i run that code it gives me below error
00:42:39,813 SEVERE >>org.zkoss.zk.ui.UiException: java.lang.NoSuchMethodException: class [Ljava.lang.Object;: name=0 args=null >>java.lang.NoSuchMethodException: class [Ljava.lang.Object;: name=0 args=null >> at org.zkoss.lang.Classes.myGetAcsObj(Classes.java:968)
this happens when i click the listheader .
help me to solve my problem.
Asked: 2011-03-08 04:30:48 +0800
Seen: 1,527 times
Last updated: Mar 10 '11