解决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已经初始化


相关文章
|
6月前
|
Android开发
setOnItemClickListener不起作用解决方法
setOnItemClickListener不起作用解决方法
132 2
|
6月前
|
开发工具
已设定选项 ‘readonly‘ (请加 ! 强制执行)
已设定选项 ‘readonly‘ (请加 ! 强制执行)
582 0
使用注释来阻止程序执行
使用注释来阻止程序执行
75 0
|
iOS开发
iOS开发- stringByReplacingOccurrencesOfString不起作用的坑
iOS开发- stringByReplacingOccurrencesOfString不起作用的坑
179 0
v-show不起作用
当v-show不起作用,很大一部分是因为该标签设置了display属性样式如display: flex,该样式的优先级高于v-show的display:none/display:block,导致v-show不起作用
391 0
|
前端开发
vcharts设置legend属性无效解决办法
内容概览 需求: 折线图上有 一个产品的目标值和实际值 ,通过点击其中一个legend,同时隐藏该产品的实际值和目标值(指折线图上的线) 当我觉得这个需求很 easy 的时候,居然发现 动态设置 legend 属性无效 …… 通过本文来记录这个解决过程,前端真是太难了 哈哈 在 v-charts 中, 折线图的写法如下: <ve-line :extend="chartExtend" :data="chartData" :events="chartEvents" height="58vh" ></ve-line>。 而 v-charts 是对 echart 的包装,很多事件都可以从 ech
1379 0
|
安全 Windows
ToolStripStatusLabel 没有 InvokeRequired 属性的解决办法
ToolStripStatusLabel 没有 InvokeRequired 属性的解决办法 当编写多线程程序时,你希望在线程中修改 Form 窗体上的控件的文本等属性, 但你会得到一个错误:线程间操作无效: 从不是创建控件“xxx”的线程访问它。
1664 0
|
Web App开发 前端开发
类选择器和所作用的标签一起写为什么不起作用? - CSDN博客
原文:类选择器和所作用的标签一起写为什么不起作用? - CSDN博客 HTML代码: css样式: 这不是将样式作用于circle类下的有current类的li标签吗?为什么不起作用? 原因: 选择器理解错误! 一般常用的选择器有标签选择器,类选择器,ID选择器,后代选择器等等。
1140 0