MultiselectInterceptor
该拦截器处理defaultStack第十二的位置,是用于处理select标签没有一个option被选中的情况,这个拦截器的逻辑与CheckboxIntercept拦截器非常类似,几乎是一模一样的。当一个select标签(multiple="multiple")没有一个option被选中的时候就相当于没有这个select标签,这就出现了与checkbox类似的情况。因为该拦截器与CheckboxInterceptor拦截器几乎是一样的,所以这里简单讲一下:
public String intercept(ActionInvocation actionInvocation) throws Exception {
Map parameters = actionInvocation.getInvocationContext().getParameters();//获取请求参数Map
Map<String, Object> newParams = new HashMap<String, Object>();
Set<String> keys = parameters.keySet();//请求参数key集合
for (Iterator<String> iterator = keys.iterator(); iterator.hasNext();) {
String key = iterator.next();
if (key.startsWith("__multiselect_")) {//判断key是否以__multiselect_开关
String name = key.substring("__multiselect_".length());
//从请求参数Map中移出当前参数
iterator.remove();
//如果没有选中的option
if (!parameters.containsKey(name)) {
//添加一个长度为0的String[]到newParams中
newParams.put(name, new String[0]);
}
}
}
//把newParams添加到请求参数Map中
parameters.putAll(newParams);
//调用下一个拦截器
return actionInvocation.invoke();
<span style="font-size:14px;">}</span>
这时就不作过多的解释了,如果有什么看不懂的可以参数上一个CheckboxIntercepter拦截器