解决doubleselect的doubleheadervalue不起作用

最近做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已经初始化


猜你喜欢

转载自blog.csdn.net/op_kapu/article/details/9697941