struts2 18拦截器详解(十三)
该拦截器处理defaultstack第十二的位置,是用于处理select标签没有一个option被选中的情况,这个拦截器的逻辑与checkboxintercept拦截器非常类似,几乎是一模一样的。当一个select标签(multiple="multiple")没有一个option被选中的时候就相当于没有这个select标签,这就出现了与checkbox类似的情况。因为该拦截器与checkboxinterceptor拦截器几乎是一样的,所以这里简单讲一下:
[java]
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>