ZK - Open Source Ajax Java FrameworkZK - Open Source Ajax Java Framework

GroupsModelArray can not retain data after close groupheader then open

ommpavan
19 Dec 2011 11:41:03 GMT
19 Dec 2011 11:41:03 GMT

hai

I have a list box every list item contains one input text box .i set it like
this.listBox_CheckList.setModel(new GroupsModelArray(lsit.tostring(),new LstComparator())

if i enter some data in textbox and i minimised the group header then after i opened the group header data in textbox is not existing it is clearing the text .i want to retain the data even i minimised the Listgroup header .

when ever i opened or closing Listgroup item renderer is calling if i stop that i can retain text box data .reply soon ...

vincentjian
23 Dec 2011 03:38:09 GMT
23 Dec 2011 03:38:09 GMT

Hi,

You have to listen onChange event to the textbox in the ItemRenderer class and keep the value in the bean
Please check the ZK fiddle sample:


PersonGroupRenderer.java
package j2u0uqfk$v6;

import org.zkoss.zk.ui.*;
import org.zkoss.zk.ui.event.*;
import org.zkoss.zk.ui.util.*;
import org.zkoss.zk.ui.ext.*;
import org.zkoss.zk.au.*;
import org.zkoss.zk.au.out.*;
import org.zkoss.zul.*;

public class PersonGroupRenderer implements ListitemRenderer {

public void render(Listitem item, Object data) throws Exception {
if (item instanceof Listgroup) {
Person person = (Person) data;

Listcell listcell = new Listcell();
listcell.setLabel(person.getNation());
item.appendChild(listcell);
} else if (item instanceof Listgroupfoot) {
Listcell listcell = new Listcell();
listcell.setSpan(6);
listcell.setLabel("Total " + data + " Items");
item.appendChild(listcell);
} else {
final Person person = (Person) data;
item.setValue(person);

Listcell cell1 = new Listcell();
Textbox tbx1 = new Textbox();
tbx1.setParent(cell1);
tbx1.setValue(String.valueOf(person.getId()));
cell1.setParent(item);

Listcell cell2 = new Listcell(person.getNation());
Textbox tbx2 = new Textbox(person.getNation());
tbx2.addEventListener(Events.ON_CHANGE, new EventListener(){
public void onEvent(Event event) throws Exception {
InputEvent inpEvent = (InputEvent) event;
person.setNation(inpEvent.getValue());
}
});
tbx2.setParent(cell2);
cell2.setParent(item);

Listcell cell3 = new Listcell(person.getName());
cell3.setParent(item);

Listcell cell4 = new Listcell(String.valueOf(person.getAge()));
cell4.setParent(item);
}
}
}


Person.java
package j2u0uqfk$v6;

public class Person {

private Integer id;
private String nation;
private String name;
private Integer age;

public Person() {}

public Person(String nation) {
this.nation = nation;
this.age = null;
}

public Person(Integer id, String nation, String name, Integer age) {
this.id = id;
this.nation = nation;
this.name = name;
this.age = age;
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getNation() {
return nation;
}

public void setNation(String nation) {
this.nation = nation;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}
}


PersonComparator.java
package j2u0uqfk$v6;

import java.util.Comparator;

public class PersonComparator implements Comparator<Person> {

public int compare(Person p1, Person p2) {
return p1.getNation().compareTo(p2.getNation());
}
}


GroupModelCtrl.java
package j2u0uqfk$v6;

import org.zkoss.zk.ui.*;
import org.zkoss.zk.ui.event.*;
import org.zkoss.zk.ui.util.*;
import org.zkoss.zk.ui.ext.*;
import org.zkoss.zk.au.*;
import org.zkoss.zk.au.out.*;
import org.zkoss.zul.*;
import java.math.BigInteger;
import java.util.Random;
import java.util.ArrayList;

public class GroupModelCtrl extends GenericForwardComposer{

private Listbox listbox;
private ArrayList<Person> personList = new ArrayList<Person>();
private PersonComparator comparator = new PersonComparator();

public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
setPersonList();
//set group model
GroupsModelArray groupModel = new GroupsModelArray(personList.toArray(), comparator, 1);
listbox.setModel(groupModel);

//set group item renderer
listbox.setItemRenderer(new PersonGroupRenderer());
}

private void setPersonList() {
int size = 0, i = 0, age = 0;
while (i < 3) {
String name = new BigInteger(30, new Random()).toString(32);
age = 18 + (int) (Math.random() * 23);
Person p = new Person(++i, "Taiwan", name, age);
personList.add(p);
}
size = personList.size();
while (i < size + 3) {
String name = new BigInteger(30, new Random()).toString(32);
age = 18 + (int) (Math.random() * 23);
Person p = new Person(++i, "America", name, age);
personList.add(p);
}
size = personList.size();
while (i < size + 3) {
String name = new BigInteger(30, new Random()).toString(32);
age = 18 + (int) (Math.random() * 23);
Person p = new Person(++i, "Canada", name, age);
personList.add(p);
}
}
}


index.zul
<zk>
<window title="listbox" border="normal" width="800px" apply="j2u0uqfk$v6.GroupModelCtrl">
<listbox id="listbox">
<custom-attributes org.zkoss.zul.listbox.rod="false"/>
<listhead>
<listheader width="50px" label="id" sort="auto(id)" />
<listheader width="150px" label="nation" sort="auto(nation)" />
<listheader width="150px" label="name" sort="auto(name)" />
<listheader width="50px" label="age" sort="auto(age)" />
</listhead>
</listbox>
</window>
</zk>