现在的位置: 首页 > 综合 > 正文

java用于form表单/页面回填的工具类

2017年12月02日 ⁄ 综合 ⁄ 共 2265字 ⁄ 字号 评论关闭

        项目中采用的struts 1.3 + Spring 2.6+hibernate 3.2,在jdk1.4环境下开发,在form回填时总要一项一项的去回填每一个属性,实例类的属性少了还好些,如果实体类的属性比较多,那简直是费时费力的活。于是结合java反射reflect部分的一些类的用法实现了表单的回填。下面直接贴代码:

package com.adam.dev.utils;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

/**
 * @author adam.胡升阳
 * 创建日期 2011-7-13
 */
public class FormBackfill2 {

	public FormBackfill2() {
		super();
	}	

	/**
	 * 用于将获取对象的各属性值封装为map key-value形式,
	 * key为对象的属性,value为对象值
	 * @param obj封装的对象
	 * @return map
	 */
	public Map getProperty(Object obj){
		Map map = new HashMap();	
		Class clazz = obj.getClass();
		try {	
			Field[] field = clazz.getDeclaredFields();
			for(int i=0;i<field.length;i++){
				String propertyName = field[i].getName();		//得到对象的属性名
				Method[] method = clazz.getDeclaredMethods();			
				for(int j=0;j<method.length;j++){
					String methodName = method[j].getName();	//得到方法名
					if(methodName.startsWith("get")){	//以get开头的方法
						Object  methodValue = method[j].invoke(obj,null);	//new Object[]{}
						if(propertyName.toLowerCase().equals(methodName.toLowerCase().replaceAll("get", ""))){
							map.put(propertyName, methodValue);		
						}					
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return map;
	}
	
	/**
	 * 用于将表单的值回填页面 request范围
	 * @param request
	 * @param obj
	 * @return request
	 */
	public HttpServletRequest setAttributes2Request(HttpServletRequest request,Object obj){
		try{
			Map map = this.getProperty(obj);
			for(int i=0;i<map.size();i++){
				Iterator keyIter = map.keySet().iterator();
				while(keyIter.hasNext()){
					Object key = keyIter.next();
					Object value = map.get(key);
					request.setAttribute(key.toString(), value);//回填表单属性值
				}
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		return request;
	}
	
	/**
	 * 用于将表单的值回填页面 session范围
	 * @param request
	 * @param obj
	 * @return
	 */
	public HttpServletRequest setAttributes2Session(HttpServletRequest request,Object obj){
		try{
			Map map = this.getProperty(obj);
			for(int i=0;i<map.size();i++){
				Iterator keyIter = map.keySet().iterator();
				while(keyIter.hasNext()){
					Object key = keyIter.next();
					Object value = map.get(key);
					request.getSession().setAttribute(key.toString(), value);//回填表单属性值
				}
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		return request;
	}
}

这便是实现form回填的工具类。

在调用的时候,将带值的实体类对象传入便即可回填form表单。仅仅需要简单的两行代码即可,如下所示:

//利用 formBackfill 工具类回填form表单
			FormBackfill2 formBackfill2 = new FormBackfill2();
			formBackfill2.setAttributes2Request(request, obj);
			//formBackfill2.setAttributes2Session(request, obj);

这样就很简单快捷的实现了form表单的回填。

抱歉!评论已关闭.