-
FEATURED COMPONENTS
First time here? Check out the FAQ!
Hi,
I use a grid to render a list of criteria with combo-box, textbox, calendar and 2 button "add", "delete" a criteria. The issue, when I delete or add a criteria all the grid will reset and can not retain the selected value.
Here are my codes:
<zk xmlns="http://www.zkoss.org/2005/zul"
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"
xmlns:a="http://www.zkoss.org/2005/zk/annotation">
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" arg0="win"?>
<window title="mywindow example" border="normal" width="100%" id="win" use="com.demo.WindowController">
<div>
<listbox id="type" mold="select" model="@{win.typeList}" onSelect="win.typeChange(self.selectedItem.value)"> <!-- mold: select means a dropdown list -->
<listitem self="@{each=type}" label="@{type.name}" value="@{type}"/>
</listbox>
<separator/>
<hbox style="margin-left:10px">
<grid id="meta_data_list" width="100%" model="@{win.criterias}">
<rows id="criteria">
<row self="@{each=criteria}" value="@{criteria}">
<listbox id="meta_data" mold="select" model="@{criteria.metaDataList}" selectedItem="@{criteria.selectedMeta}" onSelect="win.metaDataChange()">
<listitem self="@{each=meta}" label="@{meta.name}" value="@{meta}"/>
</listbox>
<listbox id="operations" mold="select" model="@{criteria.operations}" >
<listitem self="@{each=operation}" label="@{operation}" value="@{operation}"/>
</listbox>
<textbox value="@{criteria.value}" visible="@{criteria.rerenderedText}"/>
<button label="Add" onClick="win.addCriteria(self.parent.value)"/>
<button label="Delete" onClick="win.deleteCriteria(self.parent.value)"/>
</row>
</rows>
</grid>
</hbox>
</div>
</window>
</zk>
Controller
public class WindowController extends Window {
/**
*
*/
private static final long serialVersionUID = 1L;
private List<Type> typeList;
private List<Criteria> criterias;
private AnnotateDataBinder binder;
// initial binding
public void onCreate() {
// get the databinder for later extra load and save
binder = (AnnotateDataBinder) this.getVariable("binder", false);
// save all controls and binding
binder.saveAll();
createDB();
// refresh the screens
binder.loadAll();
}
public List<Criteria> getCriterias() {
return criterias;
}
public void setCriterias(List<Criteria> criterias) {
this.criterias = criterias;
}
public List<Type> getTypeList() {
return typeList;
}
public void setTypeList(List<Type> typeList) {
this.typeList = typeList;
}
/**
* @param typeList
*/
private void createDB() {
typeList = new ArrayList<Type>();
Type type1 = new Type("0", "Project", "Project");
Type type2 = new Type("1", "Tasks", "Tasks");
MetaData data1 = new MetaData("0", "name", "name", "text");
MetaData data2 = new MetaData("1", "description", "description", "date");
MetaData data3 = new MetaData("2", "Date create", "Date create", "combo");
List<MetaData> metaDataList1 = new ArrayList<MetaData>();
metaDataList1.add(data1);
metaDataList1.add(data2);
type1.setMetaDataList(metaDataList1);
List<MetaData> metaDataList2 = new ArrayList<MetaData>();
metaDataList2.add(data1);
metaDataList2.add(data3);
type2.setMetaDataList(metaDataList2);
typeList.add(type1);
typeList.add(type2);
List<MetaData> metaDataList = typeList.get(0).getMetaDataList();
criterias = new ArrayList<Criteria>();
Criteria criteria = new Criteria();
criteria.setMetaDataList(metaDataList);
criteria.setOperations(Constants.getOperations());
criteria.setValue("");
criterias.add(criteria);
// refresh the screens
binder.loadAll();
}
public void typeChange(Type type) {
Grid gridCtl = (Grid) getFellow("meta_data_list");
// update for criteria grid only
binder.saveComponent(gridCtl);
// clear all criterias
criterias = new ArrayList<Criteria>();
List<MetaData> metaDataList = type.getMetaDataList();
Criteria criteria = new Criteria();
criteria.setMetaDataList(metaDataList);
criteria.setOperations(Constants.getOperations());
criteria.setValue("");
criterias.add(criteria);
// reload for criteria grid only
binder.loadComponent(gridCtl);
}
public void addCriteria(Criteria criteria) {
Grid gridCtl = (Grid) getFellow("meta_data_list");
//Rows rows = (Rows) getFellow("criteria");
// update for criteria gridCtl only
//binder.saveComponent(rows);
int k = 0;
for (int i = 0; i < criterias.size(); i++) {
Criteria personCmp = (Criteria) criterias.get(i);
if (personCmp.equals(criteria)) {
k = i;
break;
}
}
criterias.add(k+1, criteria);
//copy UI components values to data bean properties in one method call.
//binder.saveAll();
//load an UI component value from data bean property in one method call.
//binder.loadComponent(rows);
//gridCtl.setModel(model);
// reload for criteria gridCtl only
binder.loadComponent(gridCtl);
}
public void deleteCriteria(Criteria criteria) {
Grid gridCtl = (Grid) getFellow("meta_data_list");
// update for criteria gridCtl only
binder.saveComponent(gridCtl);
criterias.remove(criteria);
//copy UI components values to data bean properties in one method call.
//binder.saveAll();
//load an UI component value from data bean property in one method call.
binder.loadComponent(gridCtl);
}
public void metaDataChange() {
//Listbox listbox = (Listbox) getFellow("meta_data");
//binder.saveAll();
// update for criteria gridCtl only
//binder.saveComponent(listitem);
// if (metaData.getWidgetType().equals("text")) {
//
// }
//load an UI component value from data bean property in one method call.
//binder.loadComponent(listitem);
Rows rows = (Rows) getFellow("criteria");
binder.saveComponent(rows);
}
}
Asked: 2009-08-03 14:54:18 +0800
Seen: 686 times
Last updated: Oct 11 '11