Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* BindingComboitemRenderer.java
  
  {{IS_NOTE
  	Purpose:
  		
  	Description:
  		
  	History:
  		Jan 3, 2008 10:54:54 AM , Created by jumperchen
 }}IS_NOTE
 
 Copyright (C) 2007 Potix Corporation. All Rights Reserved.
 
 {{IS_RIGHT
 	This program is distributed under GPL Version 3.0 in the hope that
 	it will be useful, but WITHOUT ANY WARRANTY.
 }}IS_RIGHT
 */
 package org.zkoss.zkplus.databind;
 
 import java.util.List;
 import java.util.Map;
 
 import  org.zkoss.zul.Combobox;
 import  org.zkoss.zul.Comboitem;

Author(s):
jumperchen
Since:
3.0.2
 
 /*package*/ class BindingComboitemRenderer implements org.zkoss.zul.ComboitemRenderer, org.zkoss.zul.ComboitemRendererExt, Serializable {
 	private static final long serialVersionUID = 200808191415L;
 	private static final String KIDS = "zkplus.databind.KIDS";
 	private Comboitem _template;
 	private DataBinder _binder;
 	private int x = 0;
 	
 	public BindingComboitemRenderer(Comboitem templateDataBinder binder) {
 		 = template;
 		 = binder;
 	}
 
 	//link cloned components with bindings of templates
 	private void linkTemplates(Component cloneComponent templateMap templatemap) {
 		if (.existsBindings(template)) {
 			templatemap.put(templateclone);
 			clone.setAttribute(.templatemap);
 			clone.setAttribute(.template);
 		}
 		
 		//Listbox in Listbox, Listbox in Grid, Grid in Listbox, Grid in Grid, 
 		//no need to process down since BindingRowRenderer of the under Grid
 		//owner will do its own linkTemplates()
 		//bug#1888911 databind and Grid in Grid not work when no _var in inner Grid
 		if (DataBinder.isCollectionOwner(template)) {
 			return;
 		}
 		
 		final Iterator itt = template.getChildren().iterator();
 		final Iterator itc = clone.getChildren().iterator();
 		while (itt.hasNext()) {
 			final Component t = (Componentitt.next();
 			final Component c = (Componentitc.next();
 			linkTemplates(cttemplatemap);	//recursive
 		}
 	}
 	
 	//setup id of cloned components (cannot called until the component is attached to Listbox)
 	private void setupCloneIds(Component clone) {
 		//bug #1813271: Data binding generates duplicate ids in grids/listboxes
 		//Bug #1962153: Data binding generates duplicate id in some case (add "_")
 		clone.setId("@" + clone.getUuid() + "_" + ++); //init id to @uuid to avoid duplicate id issue
 
 		//Listbox in Listbox, Listbox in Grid, Grid in Listbox, Grid in Grid, 
 		//no need to process down since BindingRowRenderer of the under Grid
 		//owner will do its own setupCloneIds()
 		//bug #1893247: Not unique in the new ID space when Grid in Grid
 		final Component template = DataBinder.getComponent(clone); 
 		if (template != null && DataBinder.isCollectionOwner(template)) {
 			return;
 		}
 		
 		for(final Iterator it = clone.getChildren().iterator(); it.hasNext(); ) {
 			setupCloneIds((Componentit.next()); //recursive
 		}
 	}
 
 	public void render(Comboitem itemObject beanthrows Exception {
 		final List kids = (Listitem.getAttribute();
 		item.getChildren().addAll(kids);
 		//item.removeAttribute(KIDS);
 			
 		//remove template mark of cloned component and its decendant
		//setup clone id
		//bind bean to the associated listitem and its decendant
		final String varname = (String.getAttribute(.);
		final Map templatemap = (Mapitem.getAttribute(.);
		templatemap.put(varnamebean);
		//apply the data binding
	}
	public Comboitem newComboitem(Combobox combobox) {
		//clone from template
		final Comboitem clone = (Comboitem).clone();
		//TODO: see if databinder has this kind of Comboitem, if not, add new CollectionListItem 
		//avoid duplicate id error, will set to new id when render()
		//Bug #1962153: Data binding generates duplicate id in some case add "_".
		if (!ComponentsCtrl.isAutoId(clone.getId())) {
			clone.setId("@"clone.getUuid() + "_" + ++);
		}
		//link cloned component with template
		//each Comboitem and and it decendants share the same templatemap
		Map templatemap = new HashMap(7);
		linkTemplates(clonetemplatemap);
		//link this template map to parent templatemap (Combobox in Combobox)
		Map parenttemplatemap = (Mapcombobox.getAttribute(.);
		if (parenttemplatemap != null) {
				templatemap.put(.parenttemplatemap);
		}
		//kept clone kids somewhere to avoid create too many components in browser
		final List kids = new ArrayList(clone.getChildren());
		clone.setAttribute(kids);
		clone.getChildren().clear();
		return clone;
	}
New to GrepCode? Check out our FAQ X