解决doubleselect的doubleheadervalue不起作用

简介: 最近做J2EE项目,遇到这么一个问题,设备(device)在房间(room)里,房间在楼层(building)里,在添加设备(device)的时候,需要room和building的一个二级联动,通过查资料可以用ajax,s标签的doubleselect,我选择了后者,添加的时候没有遇到问题,顺利解决了问题,但是在我要修改device的信息的时候,我需要修改上面那个二级联动,doublese

最近做J2EE项目,遇到这么一个问题,设备(device)在房间(room)里,房间在楼层(building)里,在添加设备(device)的时候,需要room和building的一个二级联动,通过查资料可以用ajax,s标签的doubleselect,我选择了后者,添加的时候没有遇到问题,顺利解决了问题,但是在我要修改device的信息的时候,我需要修改上面那个二级联动,doubleselect自带的headervalue是可以用的,新增一个option,但是第二个select的初始值是不好用的,就是说doubleheadervalue是没办法正常达到我的需求的,百度,谷歌,csdn等等查了一些资料,都是再问问题却没有找到一个合理的解决方案。

开始的时候我想到了3种解决方案:

1.修改s标签的源码,DoubleListUIBean,DoubleSelect,AbstractDoubleListTag,DoubleSelectTag,还有几个vm文件,通过查看html源码和对应着java源码,.vm源码,想找到修改的方法,才疏学浅,没搞定……后面如果捣鼓清楚了,再回回来补充~

2.用JS页面上直接控制selected,尝试之后发现,第一个管用,第二个还是不管用,愁死了,可能需要继续优化~

3.通过对原理的理解,doubleselect的默认select都是第0位的option,原来用法是:

	//获取第一个select的list
    	buildingList = buildingService.findAll();
    	//组装map,组装第二个select
	map = new LinkedHashMap<Integer,List<Room>>(); 
	or(int i=0;i<buildingList.size();i++){
		Building building = buildingList.get(i);
		roomList = building.getRooms();
		map.put(building.getId(), roomList);
	}
当然所需要的get,set这里就不多说了,到页面上就是按照顺序,selected放在了第0位,这样的话,我要实现它的初始化就把device原来的room和building放在第0位就可以了,这里还应注意,buildinglist里device.room.device放在0位之后,map里的添加也要放在0位,然后是roomlist里的device.room放在0位,代码实现如下:

		device = deviceService.findById(entityId);
		buildingList = buildingService.findAll();
		//重组第一个select的list
		for(int i=0;i<buildingList.size();i++){
			if(device.getRoom().getBuilding() == buildingList.get(i)){
				buildingList.remove(i);
				buildingList.add(0, device.getRoom().getBuilding());
				break;
			}
		}
		//LinkedHashMap  插入顺序不变,不会按照key排序
		map = new LinkedHashMap<Integer,List<Room>>();
		//重组第二个select的list
		List<Room> roomList = device.getRoom().getBuilding().getRooms();
		for(int i=0;i<roomList.size();i++){
			if(device.getRoom() == roomList.get(i)){
				roomList.remove(device.getRoom());
				roomList.add(0,device.getRoom());
				break;
			}
		}
		
		map.put(device.getRoom().getBuilding().getId(), roomList);
		for(int i=0;i<buildingList.size();i++){
			if(device.getRoom().getBuilding().getId() == buildingList.get(i).getId()){

			}else{
				Building building = buildingList.get(i);
				roomList = building.getRooms();
				map.put(building.getId(), roomList);
			}
		}
		ActionContext.getContext().put("device", device);



我要修改的信息;


device详细信息,building和room已经初始化


相关文章
|
缓存
进程池,记得看注释
进程池,记得看注释
|
4月前
|
Linux Docker 容器
10-24|如果我这两个都配置了privileged:true我后边加的这个管用吗
10-24|如果我这两个都配置了privileged:true我后边加的这个管用吗
|
8月前
|
Android开发
setOnItemClickListener不起作用解决方法
setOnItemClickListener不起作用解决方法
170 2
|
8月前
|
开发工具
已设定选项 ‘readonly‘ (请加 ! 强制执行)
已设定选项 ‘readonly‘ (请加 ! 强制执行)
676 0
|
8月前
|
C++
当前不会命中断点还未为文档加载任何符号
当前不会命中断点还未为文档加载任何符号
145 2
使用注释来阻止程序执行
使用注释来阻止程序执行
83 0
|
Linux
LINUX脚本传递多个带空格参数的解决办法
LINUX脚本传递多个带空格参数的解决办法
367 0
v-show不起作用
当v-show不起作用,很大一部分是因为该标签设置了display属性样式如display: flex,该样式的优先级高于v-show的display:none/display:block,导致v-show不起作用
420 0
关于 VS调试时出现“当前不会命中断点。还没有为该文将加载任何符号。” 的解决方法
关于 VS调试时出现“当前不会命中断点。还没有为该文将加载任何符号。” 的解决方法
关于 VS调试时出现“当前不会命中断点。还没有为该文将加载任何符号。” 的解决方法
|
Java 程序员 API
来,教你去掉了烦人的 !=null
为了避免空指针调用,我们经常会看到这样的语句: