answered
2016-05-18 15:27:02 +0800
maxspuls 1 ● 2 BEST SOLUTION
<zk>
<window width="100%" border="none" apply="org.zkoss.bind.BindComposer" viewmodel="@id('vm') @init('model.ViewModel')">
<tree model="@bind(vm.treeNodes)" mold="paging" pagesize="4">
<treecols sizable="true">
<treecol label="nome" width="120px"/>
<treecol label="cognome" width="300px"/>
</treecols>
<template name="model">
<treeitem open="@bind(each.open)">
<treerow>
<treecell label="@bind(each.data.name)"></treecell>
<treecell label="@bind(each.data.lastName)"></treecell>
<treecell>
</treecell>
</treerow>
</treeitem>
</template>
</tree>
</window>
</zk>
package model;
import java.util.LinkedList;
import org.zkoss.bind.annotation.Init;
import org.zkoss.zul.DefaultTreeModel;
import org.zkoss.zul.TreeModel;
import org.zkoss.zul.TreeNode;
public class ViewModel {
private PersonTreeNode<person> treeRoot=null;
private TreeModel<treenode<person>> treeNodes=null;
public PersonTreeNode<person> getTreeRoot() {
return treeRoot;
}
public void setTreeRoot(PersonTreeNode<person> treeRoot) {
this.treeRoot = treeRoot;
}
public TreeModel<treenode<person>> getTreeNodes() {
return this.treeNodes;
}
public void setTreeNodes(TreeModel<treenode<person>> treeNodes) {
this.treeNodes = treeNodes;
}
@Init
public void init(){
this.loadDati();
}
public PersonTreeNode<person>addTreeNode(boolean open){
return this.addTreeNode( null, open);
}
public PersonTreeNode<person> addTreeNode(){
return this.addTreeNode( null, false);
}
public PersonTreeNode<person> addTreeNode(PersonTreeNode<person> parent){
return this.addTreeNode(parent, false);
}
public PersonTreeNode<person> addTreeNode(PersonTreeNode<person> parent,boolean open){
return this.addTreeNode(parent,open,null);
}
public PersonTreeNode<person> addTreeNode(PersonTreeNode<person> parent,boolean open,Integer pos){
if ( parent==null )
{
if ( this.treeRoot==null )
{
this.treeRoot=new PersonTreeNode<Person>(null,new LinkedList<PersonTreeNode<Person>>(),treeNodes,open);
this.treeNodes=new DefaultTreeModel<Person>(this.treeRoot);
}
parent=this.treeRoot;
}
Person row =new Person();
PersonTreeNode<Person> treeNode=null;
treeNode=new PersonTreeNode<Person>(parent,row,new LinkedList<PersonTreeNode<Person>>(),this.treeNodes,open,pos);
if ( treeNode.isOpen() )
((DefaultTreeModel<Person>)treeNodes).addOpenObject(treeNode);
return treeNode;
}
public void loadDati(){
Person row=null;
PersonTreeNode<Person> nodeParent;
PersonTreeNode<Person> node;
nodeParent=this.addTreeNode(true);
row=nodeParent.getData();
row.setLastName("Bianchi");
row.setName("Gino");
node=this.addTreeNode(nodeParent,true);
node.setLeaf(true);
row=node.getData();
row.setLastName("Rossi");
row.setName("Nino");
node=this.addTreeNode(nodeParent,true);
node.setLeaf(true);
row=node.getData();
row.setLastName("Verdi");
row.setName("Paolo");
node=this.addTreeNode(nodeParent,true);
node.setLeaf(true);
row=node.getData();
row.setLastName("Blues");
row.setName("Ugo");
node=this.addTreeNode(nodeParent,true);
node.setLeaf(true);
row=node.getData();
row.setLastName("Bianchio");
row.setName("Gianni");
}
}
package model;
import java.util.LinkedList;
import org.zkoss.poi.ss.formula.functions.T;
import org.zkoss.zul.DefaultTreeModel;
import org.zkoss.zul.DefaultTreeNode;
import org.zkoss.zul.TreeModel;
import org.zkoss.zul.TreeNode;
public class PersonTreeNode<t> extends DefaultTreeNode<t> {
private static final long serialVersionUID = -8085873079938209759L;
// Node Control the default open
private boolean open = false;
private boolean leafNode=true;
private TreeModel<treenode<t>> treeNodes=null;
public PersonTreeNode(T data, LinkedList<persontreenode<t>> children,
TreeModel<treenode<t>>treeNodes,boolean open) {
super(data, children);
this.treeNodes=treeNodes;
this.open = open;
}
public PersonTreeNode(PersonTreeNode<t> parent,T data, LinkedList<persontreenode<t>>
children,TreeModel<treenode<t>>treeNodes, boolean open) {
super(data, children);
this.treeNodes=treeNodes;
this.open = open;
parent.setLeaf(false);
parent.add(this);
}
public PersonTreeNode(PersonTreeNode<t> parent,T data, LinkedList<persontreenode<t>> children, TreeModel<treenode<t>>treeNodes,boolean open,Integer pos) {
super(data, children);
this.treeNodes=treeNodes;
this.open = open;
parent.setLeaf(false);
if (pos==null || parent.getChildren().size()==0 )
parent.add(this);
else
parent.getChildren().add(pos,this);
}
public PersonTreeNode(T data, LinkedList<persontreenode<t>> children,TreeModel<treenode<t>>treeNodes) {
super(data, children);
this.treeNodes=treeNodes;
}
public PersonTreeNode(PersonTreeNode<t> parent,T data, LinkedList<persontreenode<t>> children,TreeModel<treenode<t>>treeNodes) {
super(data, children);
this.treeNodes=treeNodes;
parent.setLeaf(false);
parent.add(this);
}
public PersonTreeNode(PersonTreeNode<t> parent,T data,TreeModel<treenode<t>>treeNodes) {
super(data);
parent.setLeaf(false);
parent.add(this);
}
public PersonTreeNode(PersonTreeNode<t> parent,T data,TreeModel<treenode<t>>treeNodes,boolean open) {
super(data);
parent.setLeaf(false);
parent.add(this);
this.treeNodes=treeNodes;
this.open = open;
}
public PersonTreeNode(T data,TreeModel<treenode<t>>treeNodes) {
super(data);
this.treeNodes=treeNodes;
}
public PersonTreeNode(T data,TreeModel<treenode<t>>treeNodes,boolean open) {
super(data);
this.treeNodes=treeNodes;
this.open = open;
}
public boolean isOpen() {
return open;
}
public void setOpen(boolean open) {
this.open = open;
if ( open )
((DefaultTreeModel<T>)treeNodes).addOpenObject(this);
else
((DefaultTreeModel<T>)treeNodes).removeOpenObject(this);
}
public boolean isLeaf() {
return leafNode;
}
public void setLeaf(boolean value) {
this.leafNode=value;
if ( value )
this.open=false;
}
}
Uhmm weird: the next page button does not work unless you FIRST collapse the root node "Gino Bianchi" -> then you are able to go to page 2 where there is a row (but it is empty)... digging
gganassin ( 2016-03-04 12:03:20 +0800 )editExactly! :-)
LuigiFabbri ( 2016-03-22 14:42:04 +0800 )edit