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


相关文章
|
存储 监控 C语言
西门子S7-1200编程实例,关断延迟定时器指令如何使用?
在西门子S7-1200中有四种类型的定时器:TON接通延迟定时器、TONR保持型接通延迟定时器、TOF关断延迟定时器、TP脉冲定时器。
西门子S7-1200编程实例,关断延迟定时器指令如何使用?
|
消息中间件 存储 缓存
Spring Cloud 分布式实时日志分析采集三种方案~
Spring Cloud 分布式实时日志分析采集三种方案~
Spring Cloud 分布式实时日志分析采集三种方案~
|
Java 数据库连接 数据安全/隐私保护
利用开源工具实现轻量级上网行为审计(来源ispublic.com)
来源ispublic.com Google上貌似找不到利用开源软件实现上网行为审计的文章——这也难怪,开源在国内并不流行,而上网行为审计在国外也不流行。
1707 0
|
9月前
|
存储 NoSQL 关系型数据库
阿里云数据库MongoDB版助力信也科技 打造互联网金融企业样板
我们的风控系统引入阿里云数据库MongoDB版后,解决了特征类字段灵活加减的问题,大大提高了开发效率,极大的提升了业务用户体验,获得了非常好的效果
阿里云数据库MongoDB版助力信也科技 打造互联网金融企业样板
|
10月前
|
监控 API 索引
Elasticsearch集群使用 _cluster/health API
Elasticsearch集群使用 _cluster/health API
371 2
|
Web App开发 编译器 C语言
QT5.14.2使用webkit引擎完成网页浏览
QT5.14.2使用webkit引擎完成网页浏览
1335 0
QT5.14.2使用webkit引擎完成网页浏览
|
Java
Java封装
Java封装
227 1
|
并行计算 openCL 大数据
GPU---并行计算利器
源于阿里巴巴CCO《猿来如此》分享 1 GPU是什么       如图1所示,这台PC机与普通PC机不同的是这里插了7张显卡,左下角是显卡,在中间的就是GPU芯片。显卡的处理器称为图形处理器(GPU),它是显卡的“心脏”,与CPU类似,只不过GPU是专为执行复杂的数学和几何计算而设计的。  
4767 2
|
弹性计算
在阿里云服务器上配置端口步骤
在阿里云服务器上配置端口步骤第一步:点击【云服务器ECS】,进入该服务器信息界面。 第二步:点击【云服务器】,如下图: 第三步:进入【云服务器】页面可看到【实例】页面上会有实力列表,点击列表上的【管理】,可进入该服务器的详细信息页面如下图: 第四步:进入【管理】页面中,点击左侧菜单栏中的【本实例安...
5179 0