利用反射来或者jsp页面表单中的值
在新公司工作的时候,遇到一个模块没有用框架,而且一个对象二十几个属性值,要做增删改查,如果是手写的话,在每次请求request的时候都要手动的去request.getParameter("xxx");这样一来就显得很麻烦了,因此在这里介绍一种利用反射来获取jsp页面form表单属性值
1 /** 2 * 将request请求转换为JavaBean 3 * @param <T> 4 * @param request 5 * @param clazz JavaBean对象.class 6 * @return T 7 * @throws IllegalAccessException 8 * @throws InstantiationException 9 * @throws SecurityException 10 */ 11 public<T> T ParseRequestToJavaBean(HttpServletRequest request,Class<T> clazz) 12 throws SecurityException, InstantiationException, IllegalAccessException{ 13 Map<String, Object> pageInfo = null; 14 try { 15 pageInfo = getPageInfo(request,clazz); 16 } catch (UnsupportedEncodingException e1) { 17 e1.printStackTrace(); 18 } 19 T t = null; 20 Method[] methods = clazz.getMethods(); 21 try { 22 t = clazz.newInstance(); 23 for (String paramName : pageInfo.keySet()) { 24 //把key变成set方法名 25 String setMethodName = "set" + paramName; 26 for (Method setMethod : methods) { 27 //方法名相同 28 if(setMethodName.equalsIgnoreCase(setMethod.getName())){ 29 //标准的JavaBean只有一个参数 30 String fieldTypeName = setMethod.getParameterTypes()[0].getName(); 31 //获得Map中参数参数类型 32 String typeName = pageInfo.get(paramName).getClass().getName(); 33 //比较参数类型是否相同 34 if(typeName.equalsIgnoreCase(fieldTypeName)){ 35 setMethod.invoke(t, new Object[]{pageInfo.get(paramName)}); 36 }else 37 continue; 38 break; 39 } 40 } 41 } 42 } catch (Exception e) { 43 throw new JdbcCloseException("请求转换为javabean异常"); 44 } 45 return t; 46 } 47 48 /** 49 * 将request请求转换为Map 50 * @param request 51 * @return Map<String,Object> 52 * @throws IllegalAccessException 53 * @throws InstantiationException 54 * @throws SecurityException 55 * @throws UnsupportedEncodingException 56 */ 57 public<T> Map<String,Object> getPageInfo(HttpServletRequest request,Class<T> clazz) 58 throws SecurityException, InstantiationException, IllegalAccessException, 59 UnsupportedEncodingException{ 60 Map<String,Object> pageInfo = new HashMap<String,Object>(); 61 //获得参数枚举 62 Enumeration<?> enumeration = request.getParameterNames(); 63 //获得对象的字段名 64 while(enumeration.hasMoreElements()){ 65 //获取参数名称 66 String paramName = (String) enumeration.nextElement(); 67 //字段名和参数名相同,赋值 68 //获得参数值数组 69 String[] values = request.getParameterValues(paramName); 70 if(values == null) 71 pageInfo.put(paramName, ""); 72 else if(values.length == 1){ //转码URLDecoder 73 pageInfo.put(paramName, URLDecoder.decode(values[0],"utf-8")); 74 } 75 else{ 76 String v = URLDecoder.decode(values[0],"UTF-8"); 77 for (int i = 1; i < values.length; i++) { 78 v += "," + URLDecoder.decode(values[i],"UTF-8"); 79 } 80 pageInfo.put(paramName, v); 81 } 82 } 83 return pageInfo; 84 }
不过该方法有个缺陷,就是我在取值的时候,面对select元素,无法取的被选择的option选项的值,有知道的大大还请留下一些解决方法,感激不敬

浙公网安备 33010602011771号