service层:
/**
* getCslbZdMap:(获取场所类别和细类). <br/>
* @author syzhao
* @param
* @return List<DlgbZd>
* @since JDK 1.6
*/
public HashMap<String, List<DlgbZd>> getCslbZdMap()
{
//获取场所的所有的细类
List<DlgbZd> list = pci.getZdList("CS_CSLBXL");
//获取大类的数组
String[] dlDm = this.getCslbDl();
//定义map ,key = 大类的DM ,value 是每个大类对应的细类 (这样做就要要求大类和细类必须有联系)
HashMap<String,List<DlgbZd>> map = new HashMap<String,List<DlgbZd>>();
for (int i = 0; i < dlDm.length; i++) {
List<DlgbZd> zdList =new ArrayList<DlgbZd>();
for (DlgbZd dlgbZd : list) {
//这个if是比较关键的地方,因为大类的代码是1,2,3,4 .... ,而细类则是1001,1002 、 2001,2002 、3001,3002....,
//因此我根据大类的代码对应细类的代码的第一位来判断的,,如果不一样,对应改变就可以了,,,,因此dlgbZd.getDm().indexOf(dlDm[i])==0就这样的目的
if (dlgbZd.getDm().indexOf(dlDm[i])==0) {
//把每个大类写的细类放到list里
zdList.add(dlgbZd);
}
}
//把大类的代码放到key里,,,对应的细类放到value,在界面通过大类直接获取细类
map.put(dlDm[i], zdList);
//列表为null,为下次循环初始化
zdList = null;
}
//返回map
return map;
}
/**
*
* getCslbDl:(获取大类). <br/>
* @author syzhao
* @return 数组
* @since JDK 1.6
*/
public String[] getCslbDl()
{
/**
* 获取所有的大类
*/
List<DlgbZd> list = pci.getZdList("CS_CSLB");
//初始化数组,并且初始化大小
String[] arrays = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
//把大类的代码放到数组里
arrays[i]=list.get(i).getDm();
}
//返回数组
return arrays;
}
Controller层:
@RequestMapping("/zdcs/csxxList.do")
public String csxxList(Page<GbZdcsJbxx> page,GbZdcsJbxx gbZdcsJbxx, Model model){
User user = businessSecurityManager.getCurrentUser();
model.addAttribute("page",csxxXsManager.csxxList(page, gbZdcsJbxx, user));
model.addAttribute("gbZdcsJbxx",gbZdcsJbxx);
//获取场所类别和场所细类的json数据
HashMap<String, List<DlgbZd>> map = csxxLrManager.getCslbZdMap();
//把map转换成json对象
JSONObject jsonObject = JSONObject.fromObject(map);
model.addAttribute("map", jsonObject);
return "zdcs/csxxList";
}
jsp: 这块最好从 $("#cslb").click(function(){})看
html部分:
<tr>
<th style="width:10%;"><font>*</font>场所类别:</th>
<td><my:typeSelect name="cslb" id="cslb" lxjp="CS_CSLB" selected="${gbZdcsJbxx.cslb }" cssClass="xx_select" empty="true" emptyDy="false"/></td>
<th style="width:10%;"><font>*</font>场所细类:</th>
<td>
<select name="cslbxl" id="cslbxl" class="xx_select"></select>
</td>
</tr>
js部分:
//初始化细类的下拉框,第一个option默认为请选择
$("#cslbxl").append("<option value=''>请选择</option>");
//获取字典数据,,这个是后台传过来的json格式的对象
var map = ${map};//d定义一个全局变量,后面要使用
//编辑时需要获取大类的代码,循环map 的key值,,和你获取的大类代码比较,如果相同,就把该大类下的细类取出即:map[i]
for(var i in map){
if("${gbZdcsJbxx.cslb }"==i)
{
showAppend(map[i]);
}
}
//初始化查询下拉框 ,这部分是保留查询框的值不被丢失
$(document).ready(function(){
var cslbxl = "${gbZdcsJbxx.cslbxl}";
selectValue("cslbxl",cslbxl);
});
//下拉框自动选值,name是下拉框列表的名字,value是选中的值
function selectValue(name,value)
{
$("select[name='"+name+"']").val(value);
}
//循环json ,这里是细类的json
function appendCsxl(objs)
{
//初始化是请选择,,,
var trs = "<option value=''>请选择</option>";
if(objs != "")
{
//eval是把字符串的json转成对象
$.each(eval(objs), function (n, value) {
//拼接字符串
trs += "<option value=" + value.dm + ">" + value.mc + "</option>";
});
}
return trs;
}
//拼接字符串
function showAppend(objs)
{
//清除细类里的所有option标签
$("#cslbxl").html("");
//进行重新拼接
$("#cslbxl").append(appendCsxl(objs));
}
//场所细类,这个是判断大类是否已经选择,否则就提示请选择大类,防止空数据出现
$("#cslbxl").click(function (){
if($("#cslb").val() =="")
{
showAppend("");
alert("请先选择场所类别!");
$("#cslb").focus();
}
});
//场所类别 ,大类的点击事件,,也就是所有的动作的开始
$("#cslb").click(function(){
//循环 map
for(var i in map){
//根据用户所选的大类,获取对应的大类代码和map里的key进行比较
if($("#cslb").val()==i)
{
//如果相同就把对应的细类给showAppend,让这个函数处理,
showAppend(map[i]);
}
}
});
以上就是一个动态实现二级联动的效果,,,我刚开始以为不用写很多,,结果写着写着就不少了,,,没办法,功能需要
大类和细类实现二级联动效果
最新推荐文章于 2020-08-11 21:27:39 发布