这个属于自身表无限极遍历 不知道这个标签支持 吗?
部门表:tblBasDepartments
文件名是:TblBasDepartment private String deptId;
private TblBasDepartment tblBasDepartment;
private String deptFlag;
private String deptName;
private Set<TblBasDepartment> tblBasDepartments = new LinkedHashSet<TblBasDepartment>();
private Set<TblSysUser> tblSysUsers = new LinkedHashSet<TblSysUser>(); //set get 省略
<s:iterator value="tblBasDepartments" >
${deptName}
<s:iterator value="tblSysUsers">
${userName}
</s:iterator>
</s:iterator>我想这样的数据
总公司
|___分一公司 ----- 很多用户
|__分二公司 ------很多用户
|__分三公司 -------很多用户
:
:
很多级别的数据
不是树是一种包含关系,因为我对部门表进行了自关联。
这个的构造用标签可以无限级遍历出来吗?
部门表:tblBasDepartments
文件名是:TblBasDepartment private String deptId;
private TblBasDepartment tblBasDepartment;
private String deptFlag;
private String deptName;
private Set<TblBasDepartment> tblBasDepartments = new LinkedHashSet<TblBasDepartment>();
private Set<TblSysUser> tblSysUsers = new LinkedHashSet<TblSysUser>(); //set get 省略
<s:iterator value="tblBasDepartments" >
${deptName}
<s:iterator value="tblSysUsers">
${userName}
</s:iterator>
</s:iterator>我想这样的数据
总公司
|___分一公司 ----- 很多用户
|__分二公司 ------很多用户
|__分三公司 -------很多用户
:
:
很多级别的数据
不是树是一种包含关系,因为我对部门表进行了自关联。
这个的构造用标签可以无限级遍历出来吗?
用户表有个 userDepart (用户所属公司[对应公司表的公司类型字段])<s:iterator value="tblBasDepartments"> //所有的公司 ${deptName}
<s:iterator value="tblSysUsers"> //所以用户
<s:if test="userDepart == companyType"> //判断如果用户公司和外循环的公司的类别相同那么就显示用户信息, 如果不相同就不显示.
${userName }
</s:if>
</s:iterator>
</s:iterator>这个不知是不是楼主的意思...
可能写个函数比较明白.自定义标签也行.
直接jsp脚本更明了
每个部门又跟人员关联起来。
我现在就是 列出部门和人员。部门按照 树形结构列出来。
因为OGNL表达式可以用 department.user 取出用户列表 一对多的关系
然而部门又跟自身是一对多
package com.szk.debug.struts.tags.bean;import java.util.List;/**
* クラス名称:DT0006Bean
*
* @author szk
* @since 2009-07-20
*/
public class DT0006Bean { /** 名称 */
private String name; private List<DT0006Bean> beanList; /**
* @return the beanList
*/
public List<DT0006Bean> getBeanList() {
return beanList;
} /**
* @param beanList
* the beanList to set
*/
public void setBeanList(List<DT0006Bean> beanList) {
this.beanList = beanList;
} /**
* @return the name
*/
public String getName() {
return name;
} /**
* @param name
* the name to set
*/
public void setName(String name) {
this.name = name;
}
}
在页面类似于这样的判断
for (var i=0;i<deparmentList.size;i++)
{
while (deparmentList[i].userList.size >0)
{
System.out.println("*********");
}
}
写个自定义的jsl标签吧,实现for循环的函数.
其实用jsp代码还来得简单哦.呵呵
int deptid
int parentid; -------与deptid互为父
其实与<s:iterator>没多大关系
对是这样的。
我现在尝试用 递归去做。不用标签了。
用在jsp上写 java调用递归方法。但是递归方法也很复杂。正在思考中。下边有错误: 不过正在修改中 已经出现 死循环。刚才开会就没改。public class DepartmentUtilServlet implements Serializable{
/**
* 查询所有List子节点
* @return List
*/
public static List<TblBasDepartment> getChildNodesDepthFirst(List<TblBasDepartment> list) {
List<TblBasDepartment> result = new ArrayList<TblBasDepartment>();
addChildNodesDepthFirst(result,list);
return result;
} static void addChildNodesDepthFirst(List<TblBasDepartment> result,List<TblBasDepartment> list) {
for (TblBasDepartment tblBasDepartment : list) {
result.add(tblBasDepartment);
if (tblBasDepartment.getTblBasDepartments() != null) {
for (Iterator<TblBasDepartment> iter = tblBasDepartment.getTblBasDepartments().iterator(); iter.hasNext();) {
result.add(iter.next());
addChildNodesDepthFirst(result,list);
}
}
}
}}
这个自对应表 private String deptId;
private TblBasDepartment tblBasDepartment; //其实这里就是deptPid只不过对应自身的deptId了
-----------------------------------------------------------
我那个递归的思路是 不分他的父亲和孩子 都放在一起。组成一个List。
因为List是有序集合,我在页面遍历的时候 当前PID是够等于 上一个节点的ID 是就是父子关系。
把这行数据移动(width:30PX) 就行
这是目前的解决思路。
因为我用的是 对象关联关系,所以主要取出部门 用户就可以取出。用的是惰性加载机制。