0

ZK demo---- grid(sorting and menu)---its urgent

asked 2009-06-04 05:00:49 +0800

shilpa gravatar image shilpa
51 4

<zk>
<!-- Due to the security constraint, ZK demo site doesn't allow
zscript to declare a class. Instead we use a pre-compiled Java class.
You can uncomment the following and try it in your local server.
<zscript>
class Comp implements Comparator {
private boolean _asc;
public Comp(boolean asc) {
_asc = asc;
}
public int compare(Object o1, Object o2) {
String s1 = o1.getChildren().get(0).getValue(),
s2 = o2.getChildren().get(0).getValue();
int v = s1.compareTo(s2);
return _asc ? v: -v;
}
}
Comp asc = new Comp(true), dsc = new Comp(false);
</zscript>
-->
<zscript>
import org.zkoss.zkdemo.userguide.*;
Comparator asc = new RowLabelComparator(true),
dsc = new RowLabelComparator(false);
</zscript>
<grid>
<columns menupopup="auto">
<column label="Author" sortAscending="${asc}" sortDescending="${dsc}"/>
<column label="Title"/>
<column label="Publisher"/>
<column label="Hardcover"/>
</columns>
<rows>
<row>
<label value="Philip Hensher"/>
<label value="The Northern Clemency"/>
<label value="Knopf (October 30, 2008)"/>
<label value="608 pages"/>
</row>
<row>
<label value="Philip Hensher"/>
<label value="The Fit"/>
<label value="HarperPerennial (April 4, 2005)"/>
<label value="240 pages"/>
</row>
<row>
<label value="Philip Hensher"/>
<label value="Kitchen Venom"/>
<label value="Flamingo (May 19, 2003)"/>
<label value="336 pages"/>
</row>
<row>
<label value="Michael Greenberg"/>
<label value="Hurry Down Sunshine"/>
<label value="Other Press (September 9, 2008)"/>
<label value="240 pages"/>
</row>
<row>
<label value="Michael Greenberg"/>
<label value="Painless Vocabulary (Painless)"/>
<label value="Barron's Educational Series (September 1, 2001)"/>
<label value="292 pages"/>
</row>
<row>
<label value="Rick Perlstein"/>
<label value="Nixonland: The Rise of a President and the Fracturing of America"/>
<label value="Scribner; 1st Scribner Hardcover Ed edition (May 13, 2008)"/>
<label value="896 pages"/>
</row>
<row>
<label value="Rick Perlstein"/>
<label value="Nixonland"/>
<label value="Simon & Schuster (May 13, 2008)"/>
<label value="0 pages"/>
</row>
</rows>
</grid>
</zk>

I din't get that above commented statement (class declaration is not possible in zscript)....plz help me and explain me in steps...
plz help me....its urgent...

delete flag offensive retag edit

5 Replies

Sort by ยป oldest newest

answered 2010-05-17 00:29:40 +0800

gaoqz gravatar image gaoqz
3

<zk>
<!-- Due to the security constraint, ZK demo site doesn't allow
zscript to declare a class. Instead we use a pre-compiled Java class.
You can uncomment the following and try it in your local server.
<zscript>
class Comp implements Comparator {
private boolean _asc;
public Comp(boolean asc) {
_asc = asc;
}
public int compare(Object o1, Object o2) {
String s1 = o1.getChildren().get(0).getValue(),
s2 = o2.getChildren().get(0).getValue();
int v = s1.compareTo(s2);
return _asc ? v: -v;
}
}
Comp asc = new Comp(true), dsc = new Comp(false);
</zscript>
-->
<zscript>
import org.zkoss.zkdemo.userguide.*;
Comparator asc = new RowLabelComparator(true),
dsc = new RowLabelComparator(false);
</zscript>
<grid>
<columns menupopup="auto">
<column label="Author" sortAscending="${asc}" sortDescending="${dsc}"/>
<column label="Title"/>
<column label="Publisher"/>
<column label="Hardcover"/>
</columns>
<rows>
<row>
<label value="Philip Hensher"/>
<label value="The Northern Clemency"/>
<label value="Knopf (October 30, 2008)"/>
<label value="608 pages"/>
</row>
<row>
<label value="Philip Hensher"/>
<label value="The Fit"/>
<label value="HarperPerennial (April 4, 2005)"/>
<label value="240 pages"/>
</row>
<row>
<label value="Philip Hensher"/>
<label value="Kitchen Venom"/>
<label value="Flamingo (May 19, 2003)"/>
<label value="336 pages"/>
</row>
<row>
<label value="Michael Greenberg"/>
<label value="Hurry Down Sunshine"/>
<label value="Other Press (September 9, 2008)"/>
<label value="240 pages"/>
</row>
<row>
<label value="Michael Greenberg"/>
<label value="Painless Vocabulary (Painless)"/>
<label value="Barron's Educational Series (September 1, 2001)"/>
<label value="292 pages"/>
</row>
<row>
<label value="Rick Perlstein"/>
<label value="Nixonland: The Rise of a President and the Fracturing of America"/>
<label value="Scribner; 1st Scribner Hardcover Ed edition (May 13, 2008)"/>
<label value="896 pages"/>
</row>
<row>
<label value="Rick Perlstein"/>
<label value="Nixonland"/>
<label value="Simon & Schuster (May 13, 2008)"/>
<label value="0 pages"/>
</row>
</rows>
</grid>
</zk>

link publish delete flag offensive edit

answered 2010-05-17 01:15:40 +0800

samchuang gravatar image samchuang
4084 4

Hi

I have modify the code, it work fine

<zk>
	<zscript><![CDATA[
		class Comp implements Comparator {
			private boolean _asc;
			public Comp(boolean asc) {
				_asc = asc;
			}
			public int compare(Object o1, Object o2) {
				String s1 = o1.getChildren().get(0).getValue(),
				s2 = o2.getChildren().get(0).getValue();
				int v = s1.compareTo(s2);
				return _asc ? v: -v;
			}
		}
		Comp asc = new Comp(true), dsc = new Comp(false);
		]]></zscript>
	<grid>
		<columns menupopup="auto">
			<column label="Author" sortAscending="${asc}"
				sortDescending="${dsc}" />
			<column label="Title" />
			<column label="Publisher" />
			<column label="Hardcover" />
		</columns>
		<rows>
			<row>
				<label value="Philip Hensher" />
				<label value="The Northern Clemency" />
				<label value="Knopf (October 30, 2008)" />
				<label value="608 pages" />
			</row>
			<row>
				<label value="Philip Hensher" />
				<label value="The Fit" />
				<label value="HarperPerennial (April 4, 2005)" />
				<label value="240 pages" />
			</row>
			<row>
				<label value="Philip Hensher" />
				<label value="Kitchen Venom" />
				<label value="Flamingo (May 19, 2003)" />
				<label value="336 pages" />
			</row>
			<row>
				<label value="Michael Greenberg" />
				<label value="Hurry Down Sunshine" />
				<label value="Other Press (September 9, 2008)" />
				<label value="240 pages" />
			</row>
			<row>
				<label value="Michael Greenberg" />
				<label value="Painless Vocabulary (Painless)" />
				<label
					value="Barron's Educational Series (September 1, 2001)" />
				<label value="292 pages" />
			</row>
			<row>
				<label value="Rick Perlstein" />
				<label
					value="Nixonland: The Rise of a President and the Fracturing of America" />
				<label
					value="Scribner; 1st Scribner Hardcover Ed edition (May 13, 2008)" />
				<label value="896 pages" />
			</row>
			<row>
				<label value="Rick Perlstein" />
				<label value="Nixonland" />
				<label value="Simon and Schuster (May 13, 2008)" />
				<label value="0 pages" />
			</row>
		</rows>
	</grid>
</zk>

link publish delete flag offensive edit

answered 2011-03-08 04:26:05 +0800

yaryan997 gravatar image yaryan997
210 2

@samchuang

Hope you may help me to solve my sorting problem.

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);
	}	


and my query executed by InternetSeller is
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

link publish delete flag offensive edit

answered 2011-03-13 20:41:26 +0800

samchuang gravatar image samchuang
4084 4

Hi @yaryan997

is't possible to provide a runnable sample code ? without db that I can re-produce your problem ?

link publish delete flag offensive edit

answered 2011-03-13 22:48:08 +0800

yaryan997 gravatar image yaryan997
210 2

@samchuang..

thanx for your support, I am able to do sorting with the database by just passing the orderby value as a parameter on the listhearder onClick event and then calling the method declared in the controller class..

So now I am able to run my query based on the passed parameter orderby value..

Best Regards
Yogendra

link publish delete flag offensive edit
Your reply
Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

[hide preview]

Question tools

Follow

RSS

Stats

Asked: 2009-06-04 05:00:49 +0800

Seen: 2,131 times

Last updated: Mar 13 '11

Support Options
  • Email Support
  • Training
  • Consulting
  • Outsourcing
Learn More