页面树

$(function(){
var rc = $('#regionCode');
var rv = rc.val();
rc.combotree({
url:"sltRegion!loadBuilding.c" + (rv ? "?selected=" + rv : ""),
onBeforeExpand:function(node){
$('#regionCode').combotree('tree').tree("options").url= "sltRegion!loadRegion.c?code="+node.id;
}
}); 
});



 <input  name="regionCode" id="regionCode" style="width:220px"  value="${regionCode }" />







/**
 * 
 */
package com.etong.cos.basedata.action;


import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import net.sf.json.JSONArray;


import com.etong.common.util.StringUtil;
import com.etong.common.web.controller.Forward;
import com.etong.common.web.fitter.CommonDispatchFitter;
import com.etong.common.web.util.WebUtils;
import com.etong.cos.basedata.domain.Building;
import com.etong.cos.basedata.domain.Region;
import com.etong.cos.basedata.domain.RegionType;
import com.etong.cos.factory.CosDaoFactory;


/**
 * <p>Title: Community One Stop - SelectRegionAction.java</p>
 * <p>Description: 加载区域和楼栋信息,也支持仅加载区域信息。</p>
 * <p>All rights reserved, 1995-2013,
 * 
 * <p>Created on 2013-4-26 下午5:05:03.</p>
 * @author Jack Hsing
 * @version 1.0
 */
public class SelectRegionAction extends CommonDispatchFitter {

/** 加载指定区域的子区域 */
public Forward loadRegion(HttpServletRequest request, HttpServletResponse response)
throws Exception {
return load(request, response, false);
}


/** 加载指定区域的子区域或楼栋 */
public Forward loadBuilding(HttpServletRequest request, HttpServletResponse response)
throws Exception {
return load(request, response, true);
}


private Forward load(HttpServletRequest request, HttpServletResponse response, boolean containBuilding)
throws Exception {

boolean full = "1".equals(request.getParameter("full"));
String code = request.getParameter("code");//当前展开的区域代码
String selected = request.getParameter("selected");//可以指定默认选中某个节点
String typeStr = request.getParameter("type");//选择到哪个区域类型(RegionType的ordinal)
int type = StringUtil.isEmpty(typeStr) ? RegionType.GRID.ordinal() : Integer.parseInt(typeStr);
List<Map<String, Object>> maps = null;
if(StringUtil.isEmpty(code)) {
code = WebUtils.getUserInfo(request).getRegionCode();
if(StringUtil.isEmpty(code) || code.length() <= 1) {
return WebUtils.responseJson(response, "[]");
}
if(full || StringUtil.isEmpty(code)) {
code = CosDaoFactory.createRegionDao().getRoot().getCode();
}
Region region = CosDaoFactory.createRegionDao().getRegionByCode(code);
boolean isLeaf = !containBuilding && region.getType().ordinal() <= type;
maps = new ArrayList<Map<String, Object>>(1);
Map<String, Object> map = new LinkedHashMap<String, Object>(5);
map.put("id", region.getCode());
map.put("text", region.getName());
map.put("checked", true);
map.put("state", "open");
if(!isLeaf) {
map.put("children", getChildren(region, selected, type, containBuilding));
}
maps.add(map);
} else {
Region region = CosDaoFactory.createRegionDao().getRegionByCode(code);
if(region == null || !containBuilding && region.getType().ordinal() <= type) {
return WebUtils.responseJson(response, "[]");
}
maps = getChildren(region, selected, type, containBuilding);
}
JSONArray json = JSONArray.fromObject(maps);
return WebUtils.responseJson(response, json.toString());
}


private List<Map<String, Object>> getChildren(Region region, String selected, int type, boolean containBuilding) {


List<Map<String, Object>> maps = null;
if(region.getType() == RegionType.GRID) {
List<Building> builds = CosDaoFactory.createBuildingDao().getBuildingsCodeLike(region.getCode());
maps = new ArrayList<Map<String, Object>>(builds.size());
for(Building build : builds) {
Map<String, Object> map = new LinkedHashMap<String, Object>(3);
map.put("id", build.getCode());
map.put("text", build.getName());
if(selected != null && build.getCode().equals(selected)) {
map.put("checked", true);
}
maps.add(map);
}
} else {
Set<Region> children = region.getChildren();
maps = new ArrayList<Map<String, Object>>(children.size());
for(Region child : children) {
boolean isLeaf = !containBuilding && child.getType().ordinal() <= type;
Map<String, Object> map = new LinkedHashMap<String, Object>(4);
map.put("id", child.getCode());
map.put("text", child.getName());
if(selected != null && !"".equals(selected)) {
if(child.getCode().equals(selected)) {
map.put("checked", true);
map.put("state", isLeaf ? "open" : "closed");
} else if(selected.startsWith(child.getCode())) {
map.put("children", getChildren(child, selected, type, containBuilding));
map.put("state", "open");
} else {
map.put("state", isLeaf ? "open" : "closed");
}
} else {
map.put("state", isLeaf ? "open" : "closed");
}
maps.add(map);
}
}
return maps;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值