package org.nutz.mvc.adaptor.injector;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.nutz.mvc.adaptor.ParamInjector;
/**
* 将整个请求的参数表转换成一个 Map
* <ul>
* <li>如果请求的参数为空,则为 Map 添加一个 null 值。
* <li>如果请求参数为一个数组,则为 Map 添加一个数组
* <li>默认为 Map 添加一个字符串型的值
* </ul>
*
* For Issue 96
*
* @author zozoh(zozohtnt@gmail.com)
*/
public class MapPairInjector implements ParamInjector {
@SuppressWarnings("unchecked")
public Object get(ServletContext sc,
HttpServletRequest req,
HttpServletResponse resp,
Object refer) {
Map<String, Object> map = new HashMap<String, Object>();
Enumeration<String> enu = (Enumeration<String>) req.getParameterNames();
while (enu.hasMoreElements()) {
String name = enu.nextElement();
String[] vs = req.getParameterValues(name);
// Null Value
if (null == vs || vs.length == 0) {
map.put(name, null);
}
// Has Value
else if (vs.length == 1) {
map.put(name, vs[0]);
}
// Array Value
else {
map.put(name, vs);
}
}
return map;
}
}