<s:doubleselect 的使用-不支持EL表达式,需要使用OGNL来动态赋值-could not be resolved as a collection/array/map/enumerati

1、问题描述:

使用 struts2 设置级联下拉菜单,需要从后台数据库动态搜索下拉列表的选项,使用<s:doubleselect 标签时发现无法使用EL表达式 即 ${"name"} 动态赋值,报错


class org.apache.jasper.JasperException:tag 'doubleselect', field 'list', name 'cooperateType': The requested list key '#bs.keySet()' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location] 


2、问题分析:

网上查询之后,说struts2 在某个版本后不再支持EL表达式赋值,而是需要使用ognl 表达式了,类似于  #request.name 、#session.name


3、问题解决

第一步:

在非动态赋值下的<s:doubleselect 标签 的使用,下面的例子中对样式做了微调,关于样式调整请参考点击打开链接

css样式

<style type="text/css">
	.doubleselecth br{
		display: none;
	}
</style>


<s:doubleselect 标签 的使用必须在 <s:form 中


<span class="doubleselecth">
		<s:set name="bs2" value="#{'业务分类':{'渠道来源'<span style="font-family: Arial, Helvetica, sans-serif;">},'WAP直销':{'长春市','吉林市','延吉市','通化市'},'链接推广':{'青岛市','滨州市'},'后台对接':{'沈阳市','大连市'}}"></s:set></span>
	<span style="white-space:pre">	</span><s:set name="bs" value="#bs"></s:set>
		<s:form id="formfdoubleselect">
		渠道选择:
		<s:doubleselect doubleCssStyle="width:100px;" cssStyle="width:100px;" name="cooperateType" doubleList="#bs[top]" list="#bs.keySet()" doubleName="channelname" ></s:doubleselect>
		</s:form>
</span>

第二步:

动态赋值下的<s:doubleselect 


java部分的代码提供setter和getter方法

参数的形式必须是Map<String,List> ,关于Map的无序问题请参考 点击打开链接

private Map<String,List> l2;

//getter和setter 方法

public Map<String, List> getL2() {
		return l2;
	}

	public void setL2(Map<String, List> l2) {
		this.l2 = l2;
	}



参数的组织,规则是,Map是LinkedHashMap,这样Map是有序的,然后键值对的key是String,value是list,key最后就是级联列表的第一个下拉框内容,value是每个首选项的子选项,即第二个下拉框显示的内容

//查询目前所有的   渠道名、项目分类
		List<Object []> l=bcCooperateService.getChannelname_cooperateTypeAll();
		//业务分类   渠道来源  全部
		List listx=new ArrayList();
		listx.add("渠道来源");//业务分类
		//WAP直销    请选择   cooperateType=00
		List list00=new ArrayList();
		list00.add("请选择");//WAP直销
		//后台对接   请选择   cooperateType=01
		List list01=new ArrayList();
		list01.add("请选择");//后台对接
		//链接推广  请选择  cooperateType=02
		List list02=new ArrayList();
		list02.add("请选择");//链接推广
		//特殊账号   请选择  cooperateType=03
		List list03=new ArrayList();
		list03.add("请选择");//特殊账号
		//合作方式 :00-(WAP直销)网销配置,非合作;01-(后台对接)接口方式;02-(链接推广)链接推广;03-(特殊账号)特殊账号
		//{'业务分类':{'渠道来源',吉林','辽宁','河北','山东','山西','北京','上海'},'WAP直销':{'请选择'},'后台对接':{'吉林','辽宁'},'链接推广':{'请选择','河北','山东','山西','北京'},'特殊账号':{'请选择','上海'}}
		for(Object[] obj:l){
			if("00".endsWith((String) obj[0])){
				listx.add(obj[1]);
				
				list00.add(obj[1]);
			}else if("01".endsWith((String) obj[0])){
				listx.add(obj[1]);
				
				list01.add(obj[1]);
			}else if("02".endsWith((String) obj[0])){
				listx.add(obj[1]);
				
				list02.add(obj[1]);
			}else if("03".endsWith((String) obj[0])){
				listx.add(obj[1]);
				
				list03.add(obj[1]);
			}
		}
		
	    l2=new LinkedHashMap();
	   
	    l2.put("业务分类", listx);
	    l2.put("WAP直销", list00);
	    l2.put("后台对接", list01);
	    l2.put("链接推广", list02);
	    l2.put("特殊账号", list03);


JSP页面部分,需用ognl 语言获取后台传值

<span class="doubleselecth">
	<s:form id="formfdoubleselect">
	<s:set name="bs" value="#request.l2"></s:set>
	渠道选择:
	<s:doubleselect doubleCssStyle="width:100px;" cssStyle="width:100px;" name="cooperatetype" doubleList="#bs[top]" list="#bs.keySet()" doubleName="channelname" ></s:doubleselect>
	</s:form>
</span>









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值