实体类:分销商信息实体类(int id,String name),区域信息实体类(char isClient(是否分销商),char isLeal(是否叶子),....),他们的关系是一(区域信息实体类)对多(分销商信息实体类)的关系。展现叶子的逻辑:private void showAreaTree(Area area, int level) {
sbTree.append("<div>");
sbTree.append("\n"); for (int i = 0; i < level; i++) {
sbTree.append("<img src=\"../images/white.gif\">");
sbTree.append("\n");
}
if ("N".equals(area.getIsLeal())) {//区域不是叶子
sbTree.append("<img alt=\"展开\" style=\"cursor:hand;\" onClick=\"display('" + area.getId() +"');\" id=\"img" + area.getId() + "\" src=\"../images/plus.gif\">");
sbTree.append("\n");
sbTree.append("<img id=\"im" + area.getId() + "\" src=\"../images/closedfold.gif\">");
sbTree.append("\n");
sbTree.append("<a href=\"area.do?commandArea=findItem&areaId="+area.getId()+"\" target=\"clientDispAreaFrame\">" + area.getName() + "</a>");
sbTree.append("\n");
//如果区域不是叶子,那么层是默认关闭
sbTree.append("<div style=\"display:none;\" id=\"div" + area.getId() + "\">");
sbTree.append("\n"); for (Iterator<Area> iter = area.getChildren().iterator(); iter
.hasNext();) { Area child = (Area) iter.next(); showAreaTree(child, level + 1);//递归展现树(只对区域有效)
如果上面两个实体类合并成一张表,那么问题就好办了! for (Iterator<Client> clientIter = child.getClientSet().iterator(); clientIter
.hasNext();) {
//showAreaTree(child, level + 1);
Client client = (Client) clientIter.next(); if ("N".equals(client.getIsClient())) {
}else{
//如果是分销商
for (int i = 0; i < 3*level; i++) {
sbTree.append("<img src=\"../images/white.gif\">");
sbTree.append("\n");
}
if ("N".equals(client.getIsLeal())) {
//如果分销商不是叶子
//展现分销商
sbTree.append("<img alt=\"展开\" style=\"cursor:hand;\" onClick=\"display('" + client.getId() +"');\" id=\"img" + client.getId() + "\" src=\"../images/plus.gif\">");
sbTree.append("\n");
sbTree.append("<img id=\"im" + client.getId() + "\" src=\"../images/closedfold.gif\">");
sbTree.append("\n");
sbTree.append("<a href=\"client_node_crud.html\" target=\"clientDispAreaFrame\">" + client.getName() + "</a>");
sbTree.append("\n");
sbTree.append("<div style=\"display:none;\" id=\"div" + client.getId() + "\">");
sbTree.append("\n");
sbTree.append("<a href=\"client.do?commandClient=findItemClient&clientId="+client.getId()+"\" target=\"clientDispAreaFrame\">" + client.getName() + "</a>");
//showAreaTree(child, level + 1);
sbTree.append("</div>");
}else {
//如果分销商是叶子
sbTree.append("<img src=\"../images/minus.gif\">");
sbTree.append("<img src=\"../images/openfold.gif\">");
sbTree.append("<a href=\"client.do?commandClient=findItemClientName&clientId="+client.getId()+"\" target=\"clientDispAreaFrame\">" + client.getName() + "</a>");
}
sbTree.append("\n");
sbTree.append("<br>\n");
}
}
}
sbTree.append("</div>");
sbTree.append("\n");
}else{
//区域是叶子
sbTree.append("<img src=\"../images/minus.gif\">");
sbTree.append("\n");
sbTree.append("<img src=\"../images/openfold.gif\">");
sbTree.append("\n");
sbTree.append("<a href=\"area.do?commandArea=findItem&areaId="+area.getId()+"\" target=\"clientDispAreaFrame\">" + area.getName() + "</a>");
sbTree.append("\n");
}
sbTree.append("</div>");
}在两个实体类的情况下:
----------- -所有区域
---------------- -东北区
-------------------- +吉林省(区域)
------------------------ -吉林医药股份有限公司(分销商)
-------------------- -黑龙江
---------------- -华南区问题:区域所在的层不能包括分销所在的层(即展现树的时候 吉林省 不能包括 吉林医药股份有限公司)请兄弟帮忙!
sbTree.append("<div>");
sbTree.append("\n"); for (int i = 0; i < level; i++) {
sbTree.append("<img src=\"../images/white.gif\">");
sbTree.append("\n");
}
if ("N".equals(area.getIsLeal())) {//区域不是叶子
sbTree.append("<img alt=\"展开\" style=\"cursor:hand;\" onClick=\"display('" + area.getId() +"');\" id=\"img" + area.getId() + "\" src=\"../images/plus.gif\">");
sbTree.append("\n");
sbTree.append("<img id=\"im" + area.getId() + "\" src=\"../images/closedfold.gif\">");
sbTree.append("\n");
sbTree.append("<a href=\"area.do?commandArea=findItem&areaId="+area.getId()+"\" target=\"clientDispAreaFrame\">" + area.getName() + "</a>");
sbTree.append("\n");
//如果区域不是叶子,那么层是默认关闭
sbTree.append("<div style=\"display:none;\" id=\"div" + area.getId() + "\">");
sbTree.append("\n"); for (Iterator<Area> iter = area.getChildren().iterator(); iter
.hasNext();) { Area child = (Area) iter.next(); showAreaTree(child, level + 1);//递归展现树(只对区域有效)
如果上面两个实体类合并成一张表,那么问题就好办了! for (Iterator<Client> clientIter = child.getClientSet().iterator(); clientIter
.hasNext();) {
//showAreaTree(child, level + 1);
Client client = (Client) clientIter.next(); if ("N".equals(client.getIsClient())) {
}else{
//如果是分销商
for (int i = 0; i < 3*level; i++) {
sbTree.append("<img src=\"../images/white.gif\">");
sbTree.append("\n");
}
if ("N".equals(client.getIsLeal())) {
//如果分销商不是叶子
//展现分销商
sbTree.append("<img alt=\"展开\" style=\"cursor:hand;\" onClick=\"display('" + client.getId() +"');\" id=\"img" + client.getId() + "\" src=\"../images/plus.gif\">");
sbTree.append("\n");
sbTree.append("<img id=\"im" + client.getId() + "\" src=\"../images/closedfold.gif\">");
sbTree.append("\n");
sbTree.append("<a href=\"client_node_crud.html\" target=\"clientDispAreaFrame\">" + client.getName() + "</a>");
sbTree.append("\n");
sbTree.append("<div style=\"display:none;\" id=\"div" + client.getId() + "\">");
sbTree.append("\n");
sbTree.append("<a href=\"client.do?commandClient=findItemClient&clientId="+client.getId()+"\" target=\"clientDispAreaFrame\">" + client.getName() + "</a>");
//showAreaTree(child, level + 1);
sbTree.append("</div>");
}else {
//如果分销商是叶子
sbTree.append("<img src=\"../images/minus.gif\">");
sbTree.append("<img src=\"../images/openfold.gif\">");
sbTree.append("<a href=\"client.do?commandClient=findItemClientName&clientId="+client.getId()+"\" target=\"clientDispAreaFrame\">" + client.getName() + "</a>");
}
sbTree.append("\n");
sbTree.append("<br>\n");
}
}
}
sbTree.append("</div>");
sbTree.append("\n");
}else{
//区域是叶子
sbTree.append("<img src=\"../images/minus.gif\">");
sbTree.append("\n");
sbTree.append("<img src=\"../images/openfold.gif\">");
sbTree.append("\n");
sbTree.append("<a href=\"area.do?commandArea=findItem&areaId="+area.getId()+"\" target=\"clientDispAreaFrame\">" + area.getName() + "</a>");
sbTree.append("\n");
}
sbTree.append("</div>");
}在两个实体类的情况下:
----------- -所有区域
---------------- -东北区
-------------------- +吉林省(区域)
------------------------ -吉林医药股份有限公司(分销商)
-------------------- -黑龙江
---------------- -华南区问题:区域所在的层不能包括分销所在的层(即展现树的时候 吉林省 不能包括 吉林医药股份有限公司)请兄弟帮忙!
目前做的最好的js树形 控件
@Table(name="t_area")
public class Area {
private int id;
private String name;
private Area parent;
private Set<Area> children=new HashSet<Area>();
private Set<Client> clientSet=new HashSet<Client>(); @OneToMany(mappedBy="area",cascade=CascadeType.ALL)
public Set<Client> getClientSet() {
return clientSet;
} public void setClientSet(Set<Client> clientSet) {
this.clientSet = clientSet;
} @Id
@GeneratedValue
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="area_id")
public Area getParent() {
return parent;
} public void setParent(Area parent) {
this.parent = parent;
}
@OneToMany(mappedBy="parent",cascade=CascadeType.ALL)
public Set<Area> getChildren() {
return children;
} public void setChildren(Set<Area> children) {
this.children = children;
}
}生成的xml为:<list>
- <area>
<id>1</id>
<name>所有区域</name>
- <children class="org.hibernate.collection.PersistentSet">
<initialized>true</initialized>
<owner class="area" reference="../.." />
<cachedSize>-1</cachedSize>
<role>com.tjy.drp.business.entity.Area.children</role>
<key class="int">1</key>
<dirty>false</dirty>
- <storedSnapshot class="map">
- <entry>
- <area>
<id>2</id>
<name>东北区</name>
<parent reference="../../../../.." />
- <children class="org.hibernate.collection.PersistentSet">
<initialized>true</initialized>
<owner class="area" reference="../.." />
<cachedSize>-1</cachedSize>
<role>com.tjy.drp.business.entity.Area.children</role>
<key class="int">2</key>
<dirty>false</dirty>
- <storedSnapshot class="map">
- <entry>
- <area>
<id>3</id>
<name>吉林省</name>
<parent reference="../../../../.." />
- <children class="org.hibernate.collection.PersistentSet">
<initialized>true</initialized>
<owner class="area" reference="../.." />
<cachedSize>-1</cachedSize>
<role>com.tjy.drp.business.entity.Area.children</role>
<key class="int">3</key>
<dirty>false</dirty>
<storedSnapshot class="map" />
<set />
</children>
- <clientSet class="org.hibernate.collection.PersistentSet">
<initialized>true</initialized>
<owner class="area" reference="../.." />
<cachedSize>-1</cachedSize>
<role>com.tjy.drp.business.entity.Area.clientSet</role>
<key class="int">3</key>
<dirty>false</dirty>
- <storedSnapshot class="map">
- <entry>
- <com.tjy.drp.business.entity.Client>
<id>2</id>
<name>吉林XXX.xx</name>
<bankAcctNo>88888888</bankAcctNo>
<contactTel>999999999</contactTel>
<address>吉林某市.xx</address>
<zipCode>7777777</zipCode>
- <clientLevel>
<id>2</id>
<name>二级分销商</name>
</clientLevel>
<area reference="../../../../.." />
</com.tjy.drp.business.entity.Client>
<com.tjy.drp.business.entity.Client reference="../com.tjy.drp.business.entity.Client" />
</entry>
- <entry>
- <com.tjy.drp.business.entity.Client>
<id>1</id>
<name>吉林XXX</name>
<bankAcctNo>88888888</bankAcctNo>
<contactTel>999999999</contactTel>
<address>吉林.xx</address>
<zipCode>7777777</zipCode>
- <clientLevel>
<id>1</id>
<name>一级分销商</name>
</clientLevel>
<area reference="../../../../.." />
</com.tjy.drp.business.entity.Client>
<com.tjy.drp.business.entity.Client reference="../com.tjy.drp.business.entity.Client" />
</entry>
</storedSnapshot>
- <set>
<com.tjy.drp.business.entity.Client reference="../../storedSnapshot/entry/com.tjy.drp.business.entity.Client" />
<com.tjy.drp.business.entity.Client reference="../../storedSnapshot/entry[2]/com.tjy.drp.business.entity.Client" />
</set>
</clientSet>
</area>
<area reference="../area" />
</entry>
- <entry>
- <area>
<id>4</id>
<name>黑龙江省</name> 数据展现为:
<body class="body1">
<script src="dhtmlxcommon.js"></script>
<script src="dhtmlxtree.js"></script>
<div id="mytree"></div>
<script>
tree=new dhtmlXTreeObject("mytree","100%","100%",0);
tree.setImagePath("images/");
//设置单击节点的事件
tree.setOnClickHandler(function(id){openPathDocs(id);});
//设置节点可以拖动
tree.enableDragAndDrop(1);
tree.enableTreeLines(true);
tree.setXMLAutoLoading("D:/maosenFirst2.xml");
tree.loadXML("D:/maosenFirst2.xml");
</script>
</body>
<list>根元素也没有闭合!