最近项目选择easyUI作为项目的前端显示组件,原因有两个一个是公司的美工确实不给力设计出来的东西太难看了,另一个原因就是easyUI有很多组件用起来很方便。
今天说要做机构管理,需要一个机构树,小弟说机构树做不出来,我觉得不应该啊!
于是我就介入,一下午的时间过去了,我也没有做出来,怎么办了,突然想到easyUI的例子,于是将关于Tree的例子拷到工程中,已运行发现没有问题
恍然大悟肯定是数据结构的问题,于是我把自己后台的数据打印出来和json文件中的做对比,发现确实是数据的问题,
经过上面一段时间的折腾,我将重点放到了我们的关于机构树的数据结构上,具体代码如下:
页面中代码:
$(function(){
$('#mmtree').tree({
url : "<%=request.getContextPath()%>/org/orgShowTreeAction.action",
onClick: function(node){
var orgId = node.id;
var orgName = node.text;
$.get('<%=request.getContextPath()%>/org/orgSearchAction.action?org.orgId=' + orgId
+ '&rdm=' + Math.random(),
function(data) {
$('#showOrgParentId').attr("value", data.orgParentId);
$('#showOrgParentName').attr("value", data.orgParentName);
$('#showOrgId').attr("value", orgId);
$('#showOrgName').attr("value", orgName);
});
}
});
});
后台Java代码:
private JSONArray result1;
public String orgShowTree(){
List<OrgVO> listVO = orgService.getOrgInfos();
result1 = JSONArray.fromObject(new OrgClassify().createOrgTree(listVO));
return SUCCESS;
}
文件夹类:
/**
* @类名: OrgClassify
* @描述: 有叶子节点的机构
* @作者:
* @生成时间: 2013-7-4 上午09:42:48
* @修改人:
* @修改时间:
**/
public class OrgClassify extends AbstractOrgTree{
private List<AbstractOrgTree> children;
public List<AbstractOrgTree> getChildren() {
return children;
}
public void setChildren(List<AbstractOrgTree> children) {
this.children = children;
}
/**
* @生成时间: 2013-7-5 上午09:43:23
* @方法说明: 将机构信息转化为机构树
* @参数:
* @返回值:
* @异常:
**/
public OrgClassify createOrgTree(List<OrgVO> listVO){
int level = 0;
for(OrgVO orgVO : listVO){
int newLevel = Integer.parseInt(orgVO.getLevelNo());
if(newLevel > level){
level = newLevel;
}
}
OrgVO first = listVO.get(0);
OrgClassify orgcls = new OrgClassify();
orgcls.setId(first.getOrgId());
orgcls.setText(first.getOrgName());
orgcls.setState("close");
if(level != 0){
level++;
for(int i = 1; i < level; i++){
for(OrgVO orgVO : listVO){
int currentLevel = Integer.parseInt(orgVO.getLevelNo());
if(currentLevel == i){
boolean isLeaf = true;
for(OrgVO orgVOtmp : listVO){
if(orgVO.getOrgId().equals(orgVOtmp.getOrgParentId())){
isLeaf = false;
break;
}
}
AbstractOrgTree temptree = null;
if(isLeaf){
temptree = new OrgLeaf();
temptree.setId(orgVO.getOrgId());
temptree.setText(orgVO.getOrgName());
temptree.setState("close");
}else{
temptree = new OrgClassify();
temptree.setId(orgVO.getOrgId());
temptree.setText(orgVO.getOrgName());
temptree.setState("close");
}
saveResultLeaf(orgVO.getOrgParentId(), temptree, orgcls);
}
}
}
}
return orgcls;
}
private void saveResultLeaf(String orgParentId, AbstractOrgTree midorgleaf, AbstractOrgTree orgcls){
if(orgcls.getId().equals(orgParentId)){
OrgClassify tmpcls = (OrgClassify)orgcls;
if(null != tmpcls.getChildren()){
tmpcls.getChildren().add(midorgleaf);
}else{
List<AbstractOrgTree> cld = new ArrayList<AbstractOrgTree>();
cld.add(midorgleaf);
tmpcls.setChildren(cld);
}
}else{
if(orgcls instanceof OrgClassify){
List<AbstractOrgTree> tempTree = ((OrgClassify)orgcls).getChildren();
if(null != tempTree)
for(AbstractOrgTree trr : tempTree){
saveResultLeaf(orgParentId, midorgleaf, trr);
}
}
}
}
}
文件对象:
/**
* @类名: OrgLeaf
* @描述: 无叶子节点的分类
* @作者:
* @生成时间: 2013-7-4 上午09:43:05
* @修改人:
* @修改时间:
**/
public class OrgLeaf extends AbstractOrgTree{
}
/**
* @类名: AbstractOrgTree
* @描述: 机构树基础类
* @作者:
* @生成时间: 2013-7-5 上午10:25:04
* @修改人:
* @修改时间:
**/
public abstract class AbstractOrgTree {
private String id;
private String text;
private String state;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}