GroupsModelArray can not retain data after close groupheader then open
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>
ZK - Open Source Ajax Java Framework
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 ...