ssh项目中需要用到多选combo,Extjs4提供了multiSelect配置项:
- multiSelect : Boolean
- If set to true, allows the combo field to hold more than one value at a time, and allows selecting multiple items from the dropdown list. The combo's text field will show all selected values separated by the delimiter.
- Defaults to: false
于是配置combo:
- {
- xtype:'LifechannelCombo',
- id:'channelid',
- name:'channelname',
- fieldLabel:'推送渠道',
- multiSelect:true,
- labelAlign: 'right',
- labelWidth: 80,
- width:260,
- selectOnFocus: true
- },
然后form提交,在action中
- HttpServletRequest request = ServletActionContext.getRequest();
- String channelid = request.getParameter("channelname");
获取,结果发现channelid只是选中的第一个值。
然后进行调试找问题,首先获取此下拉框组件的value:
- var channel = Ext.getCmp('channelid').getValue();
- alert(channel);
发现是正常的,会将多选的值按照逗号分割拼成字符串。
又以为form提交方式问题,又获取form的values:
- var formvalue = form.getValues();
通过设断点发现formvalue中的值也是正确的按照逗号分割的结果字符串。
然后就怀疑是传值过程中出现了问题,设断点查看request,
发现是这样的String数组,request.getParameter()只能得到第一个String,又查到另有一个方法getParameterValues(),返回的是String[],于是后台获取方式改为:
- HttpServletRequest request = ServletActionContext.getRequest();
- String[] channelid = request.getParameterValues("channelname");
然后将channelid从数组中取出来进行处理存入数据库即可。