前一阵做的OA项目,有一个是组织架构的树,因为是分开做的,我做的是Controller和页面,其他组做的Service和Dao,因为之前一直没有商量页面用什么框架做比较好,导致,Dao层取出来的数据都不是Easyui Tree所能识别的,其实后台返回的也是树形的结构,但是他们返回的是name,,而不是Easyui Tree所能识别的text,他们返回的是****,,而不是Easyui Tree所能识别的children,因为别人已经做好了,所以也不方便让别人重新去定义格式,所以我这边只能通过转VO,把Service返回的对象重新进行封装,使之支持Easyui ,话不多说,直接上代码。
这段是VO代码;其中主要的就是ID,text,children,要转的就是这三个
public class OrganizationVo implementsSerializable{privateInteger id;privateInteger pid;privateInteger teamId;privateString text;privateString state;privateString leader;privateInteger sort;private Listchildren;publicOrganizationVo(){}public OrganizationVo(Integer id,Integer pid, Integer teamId,String leader,Integer sort,String text,String state, Listchildren) {this.id =id;this.pid =pid;this.teamId =teamId;this.text =text;this.sort =sort;this.leader =leader;this.state =state;this.children =children;
}publicInteger getId() {returnid;
}public voidsetId(Integer id) {this.id =id;
}publicInteger getTeamId() {returnteamId;
}public voidsetTeamId(Integer teamId) {this.teamId =teamId;
}publicString getText() {returntext;
}public voidsetText(String text) {this.text =text;
}publicString getLeader() {returnleader;
}public voidsetLeader(String leader) {this.leader =leader;
}publicInteger getSort() {returnsort;
}public voidsetSort(Integer sort) {this.sort =sort;
}publicString getState() {returnstate;
}public voidsetState(String state) {this.state =state;
}public ListgetChildren() {returnchildren;
}public void setChildren(Listchildren) {this.children =children;
}publicInteger getPid() {returnpid;
}public voidsetPid(Integer pid) {this.pid =pid;
}
}
这个是转换的工具类(只要组织,不带成员)
public classTreeNoteUtil {/*** 获取父节点菜单
*@paramtreesList 所有树菜单集合
*@return
*/
public final static List getFatherNode(ListtreesList){
List newTrees = new ArrayList();for(TeamOrganizational teamOrganizational : treesList) {if (teamOrganizational.getFatherId()==null) {//如果pId为空,则该节点为父节点//递归获取父节点下的子节点
OrganizationVo newTree = newOrganizationVo();
newTree.setId(teamOrganizational.getId());
newTree.setText(teamOrganizational.getName());
newTree.setTeamId(teamOrganizational.getTeamId());
List treesLists =teamOrganizational.getSonTeamOrganizationals();
newTree.setChildren(getChildrenNode(teamOrganizational.getId(), treesLists));
newTrees.add(newTree);
}
}returnnewTrees;
}/*** 递归获取子节点下的子节点
*@parampId 父节点的ID
*@paramtreesLists 所有菜单树集合
*@return
*/
private final static List getChildrenNode(Integer pId, ListtreesLists){
List newTrees = new ArrayList();for(TeamOrganizational mt : treesLists) {if (mt.getFatherId() != null) {if (mt.getFatherId() ==pId) {
OrganizationVo newTree= newOrganizationVo();//递归获取子节点下的子节点,即设置树控件中的children
newTree.setChildren(getChildrenNode(mt.getId(), mt.getSonTeamOrganizationals()));//设置树控件attributes属性的数据
newTree.setId(mt.getId());
newTree.setText(mt.getName());
newTree.setPid(mt.getFatherId());
newTree.setTeamId(mt.getTeamId());
newTree.setSort(mt.getSort());
newTree.setLeader(mt.getLeader());
newTrees.add(newTree);
}
}
}returnnewTrees;
}
}
这个是转换的工具类(带组织,带成员)
public classTreeNoteUtil2 {/*** 获取父节点菜单
*@paramtreesList 所有树菜单集合
*@return
*/
public final static List getFatherNode(ListtreesList){
List newTrees = new ArrayList();for(TeamOrganizational teamOrganizational : treesList) {if (teamOrganizational.getFatherId()==null) {//如果pId为空,则该节点为父节点//递归获取父节点下的子节点
OrganizationVo newTree = newOrganizationVo();
newTree.setId(teamOrganizational.getId());
newTree.setText(teamOrganizational.getName());
newTree.setTeamId(teamOrganizational.getTeamId());
List treesLists =teamOrganizational.getSonTeamOrganizationals();
List treesUserLists =teamOrganizational.getOaUsers();
newTree.setChildren(getChildrenNode(teamOrganizational.getId(), treesLists,treesUserLists));
newTrees.add(newTree);
}
}returnnewTrees;
}/*** 递归获取子节点下的子节点
*@parampId 父节点的ID
*@paramtreesLists 所有菜单树集合
*@return
*/
private final static List getChildrenNode(Integer pId, List treesLists,ListtreesUserLists) {
List newTrees = new ArrayList();for(TeamOrganizational mt : treesLists) {if (mt.getFatherId() != null) {if (mt.getFatherId() ==pId) {
OrganizationVo newTree= newOrganizationVo();//递归获取子节点下的子节点,即设置树控件中的children
newTree.setChildren(getChildrenNode(mt.getId(), mt.getSonTeamOrganizationals(),treesUserLists));//设置树控件attributes属性的数据
newTree.setId(mt.getId());
newTree.setText(mt.getName());
newTree.setPid(mt.getFatherId());
newTree.setTeamId(mt.getTeamId());
newTree.setSort(mt.getSort());
newTree.setLeader(mt.getLeader());if(mt.getOaUsers().size()>0){
newTree.setChildren(getOaUsers(mt.getOaUsers()));
}
newTrees.add(newTree);
}
}
}if(treesUserLists.size()>0){for(OaUser oaUser:treesUserLists){
OrganizationVo newTree= newOrganizationVo();
newTree.setId(oaUser.getId());
newTree.setText(oaUser.getRealname());
newTrees.add(newTree);
}
}returnnewTrees;
}public static List getOaUsers(ListoaUsers){
List newTrees = new ArrayList();if (oaUsers.size()>0){for(OaUser oaUser:oaUsers){
OrganizationVo newTree= newOrganizationVo();
newTree.setId(oaUser.getId());
newTree.setText(oaUser.getRealname());
newTrees.add(newTree);
}
}else{
}returnnewTrees;
}
}
代码就这么多,主要是运用了递归的思想,因为在你不知道有多少层级的情况下,还是用递归比较方便,虽然循环比递归的速度快,占用内存小,但递归还是有其优势的;
同时,仔细看那两个工具类,第二个工具类比第一个工具类多了添加员工的操作,但是这里就不会使用递归了,因为员工下面不会再有员工了,为什么我会强调这个,因为我先写的是第一个工具类,总想着如何递归,写第二个的时候,人员总是重复添加,好久都找不到原因,后来才忽然想到,员工下面是没有员工的,于是恍然大悟。。。。