通过反射自动封装表单字段

package cn.jbit.util;

import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

import javax.imageio.spi.ServiceRegistry.Filter;
import javax.servlet.http.HttpServletRequest;

public class RequestUtil {
	public static Object getObject(HttpServletRequest request, Class clazz,
			String enc) throws UnsupportedEncodingException,
			IntrospectionException, InstantiationException, IllegalAccessException {

		Field[] fields = clazz.getDeclaredFields();
		Object obj = clazz.newInstance();
		request.setCharacterEncoding(enc);
		Map<String, String> map = new HashMap<String, String>();
		if (request.getMethod().equals("GET")) {
			System.out.println("-----------GET--------------------");
			String query = URLDecoder.decode(request.getQueryString(), enc);
			String[] str = query.split("&");
			for (String string : str) {
				try {
					map.put(string.split("=")[0], string.split("=")[1]);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		} else {
			System.out.println("-----------POST--------------------");
			Map<String, String[]> parmmap = request.getParameterMap();
			for (String key : parmmap.keySet()) {
				try {
					map.put(key, parmmap.get(key)[0]);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		for (Field field : fields) {
			try {
				PropertyDescriptor pd = new PropertyDescriptor(field.getName(),
						clazz);
				Method seter = pd.getWriteMethod();
				if (field.getType().getName().equals(int.class.getName())
						|| field.getType().getName()
								.equals(Integer.class.getName())) {
					seter.invoke(obj, Integer.valueOf(map.get(field.getName())));
				} else if (field.getType().getName()
						.equals(Date.class.getName())) {
					SimpleDateFormat sdf = new SimpleDateFormat();
					Date date = sdf.parse(map.get(field.getName()));
					seter.invoke(obj, date);
				} else if (field.getType().getName()
						.equals(Double.class.getName())
						|| field.getType().getName()
								.equals(double.class.getName())) {
					seter.invoke(obj, Double.valueOf(map.get(field.getName())));
				} else if (field.getType().getName()
						.equals(String.class.getName())) {
					seter.invoke(obj, map.get(field.getName()));
				}

			} catch (Exception e) {
				System.out.println("异常 了");
			}

		}
		return obj;
	}
}

时间: 2024-11-09 06:09:28

通过反射自动封装表单字段的相关文章

封装表单自定义错误信息。(阻止默认错误信息提示,添加自定义错误信息提示)

1 前台提交信息到后台,两种表单验证: 2 1,form 表单验证 3 2,ajax 无刷新页面提交 4 5 表单验证方法一般有: 6 1,浏览器端验证 7 2,服务器端验证 8 3,ajax验证 9 4,浏览器和服务器双重验证 10 11 html5表单新增类型: 12 email,url,number,range,data(date,month,week,time,datetime,datetime-local),search,color,tel等 13 ======== 14 重点:pat

fusioncharts批量导出图片之后自动提交表单

最近一个项目  一个页面有多个fusioncharts,需要将他们一次性导出之后再利用图片做一下操作,制作一个可以客户下载的质检简报. 对客户效果来说,我只需要点击一个按钮就能生成简报并且下载,对开发人员来说就需要,先将图片导出(当然不能挨个导出,要同时执行导出,因为fusioncharts导出太慢了),要确认全部导出了才能提交表单,要不然提交表单之后,图片没有生成出来必然产生异常.下面我们来看一下实现 首先我给每一个fusionchartschart指定一个有规律的id,作用有两个: 一个是导

深入理解表单脚本系列第二篇——表单字段

× 目录 [1]访问 [2]属性 [3]方法[4]事件 前面的话 表单字段又叫表单元素,表示表单所包含控件,如<input>.<select>等.本文将详细介绍表单字段的内容 访问 每个表单都有elements属性,该属性是表单中所有元素的集合.这个elements集合是一个有序列表,其中包含着表单中的所有字段,如<input>.<textarea>.<button>和<fieldset> 每个表单字段在elements集合中的顺序,

Ajax中通过JS代码自动获取表单元素值的示例代码

我们在使用Ajax的时候,通常需要获取表单元素值,然后发送给后台的服务器端程序处理.如果表单元素不多的情况我们常常会通过GET方式来获取表单元素值,但如果表单元素非常多,此时就需要用POST方式来获取表单元素值,那么如何来获取表单元素值呢?下面给出一段JS代码即可自动获取表单元素的值了 http://www.qidian.com/BookReader/1839917,60421843.aspx http://www.qidian.com/BookReader/1839917,60422045.a

java 传入用户名和密码并自动提交表单实现登录到其他系统

不用单点登录,模拟远程项目的登录页面表单,在访问这个页面的时候自动提交表单到此项目的登录action,就可以实现登录到其他系统. ssh框架项目 1.以下是本地系统的action代码: 1 import java.io.IOException; 2 import java.util.List; 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 i

ssi-uploader上传图片插件,点击选择文件按钮自动提交表单解决办法

先介绍一下这款插件,然后再谈使用中可能遇到的问题 ssi-uploader是一个JQuery的图片上传插件,界面比较美观 github地址:https://github.com/ssbeefeater/ssi-uploader 演示地址:http://ssbeefeater.github.io/#ssi-uploader/examples 使用文档:http://ssbeefeater.github.io/#ssi-uploader/documentation 这里就不说明怎么使用了,githu

所需的防伪表单字段“__RequestVerificationToken”不存在

错误提示为:所需的防伪表单字段"__RequestVerificationToken"不存在. <%:Html.AntiForgeryToken()%> 在mvc4中的写法 @Html.AntiForgeryToken(); 当在view中没有写而action上有写时也报上述错误. 当请求为get时也报上述错误. 只是在view中有写而action上没有写  [ValidateAntiForgeryToken]时不报错误 @Html.Raw(value)//输出带有html

文件上传控件值发生变化后自动提交表单

当文件上传控件发生变化后自动提交表单,首先在页面加载完成后注册change事件,然后检测到值得变化后提交上传代码,代码备忘. <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> window.

去掉chrome记住密码后自动填充表单的黄色背景

chrome 表单自动填充后,input文本框的背景会变成黄色的,通过审查元素可以看到这是由于chrome会默认给自动填充的input表单加上input:-webkit-autofill私有属性,然后对其赋予以下样式: input : -webkit-autofill { background-color : #FAFFBD ; background-image : none ; color : #000 ; } 在有些情况下,这个黄色的背景会影响到我们界面的效果,尤其是在我们给input文本框