$(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;
}
});
});
/**
*
*/
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;
}
}
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;
}
});
});
/**
*
*/
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;
}
}