`
忧里修斯
  • 浏览: 428274 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

页面表单数据的封装

阅读更多
1、页面表单数据的封装处理类
 package com.hf.sfm.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.commons.beanutils.PropertyUtils;
import org.apache.log4j.Logger;

/**
 * 封装所有页面提交的参数
 * 
 * @author Dream
 */
public class Buffers {

	// 保存页面提交的参数的名称和值
	ArrayList<HashMap<String, Object>> paramsNameAndValueList;
	// 保存要从页面提交的参数名称和类型
	ArrayList<HashMap<String, String>> paramsNameAndTypeList;
	// 记录日志
	Logger log;

	public Buffers() {
		paramsNameAndValueList = new ArrayList<HashMap<String, Object>>();
		paramsNameAndTypeList = new ArrayList<HashMap<String, String>>();
		log = Logger.getLogger(Buffers.class);
	}

	/**
	 * 将页面提交的参数封装到buffer中
	 * 
	 * @param request
	 * @param session
	 */
	public void assembly(HttpServletRequest request, HttpSession session) {
		loadParams(request);
		// 装配request范围内的参数
		if (request != null) {
			// 一条参数名称和类型
			HashMap<String, String> nameMap = new HashMap<String, String>();
			// 一条参数名称和实际值
			HashMap<String, Object> valueMap = new HashMap<String, Object>();
			for (int i = 0; i < paramsNameAndTypeList.size(); i++) {
				nameMap = paramsNameAndTypeList.get(i);
				String paramName = nameMap.get("paramName");
				Object paramValue = request.getParameter(paramName);
				if (paramName != null && paramValue != null) {
					valueMap.put(paramName, paramValue);
				}
				paramsNameAndValueList.add(valueMap);

			}
		}
		// 装配session范围内的参数
		if (session != null) {
			// 一条参数名称和类型
			HashMap<String, String> nameMap = new HashMap<String, String>();
			// 一条参数名称和实际值
			HashMap<String, Object> valueMap = new HashMap<String, Object>();
			for (int i = 0; i < paramsNameAndTypeList.size(); i++) {
				nameMap = paramsNameAndTypeList.get(i);
				String paramName = nameMap.get("paramName");
				Object paramValue = session.getAttribute(paramName);
				if (paramName != null && paramValue != null) {
					valueMap.put(paramName, paramValue);
				}
				paramsNameAndValueList.add(valueMap);
			}
		}
	}

	/**
	 * 从params.xml中读取页面提交的参数名称和类型 每个参数占一行,如name,string
	 */
	public void loadParams(HttpServletRequest request) {
		String basepath = request.getRealPath("");
		String filePath = basepath + "/WEB-INF/classes/params.flds";
		File file = new File(filePath);
		try {
			FileReader fileReader = new FileReader(file);
			BufferedReader bufferedReader = new BufferedReader(fileReader);
			String line = null;
			while ((line = bufferedReader.readLine()) != null) {
				HashMap<String, String> map = new HashMap<String, String>();
				String[] lineArray = line.split(",");
				String paramName = lineArray[0];
				String paramType = lineArray[1];
				map.put("paramName", paramName);
				map.put("paramType", paramType);
				paramsNameAndTypeList.add(map);

			}
		} catch (FileNotFoundException e) {
			log.error("Buffers loadParams(),文件未找到");
			e.printStackTrace();
		} catch (IOException e) {
			log.error("Buffers loadParams(),读取行失败");
			e.printStackTrace();
		}
	}

	/**
	 * 根据参数名称,获取参数实际值
	 * 
	 * @param paramName
	 * @return 参数实际值,类型为String
	 */
	public String getString(String paramName) {

		String resultString = "";
		// 一条参数名称和实际值
		HashMap<String, Object> valueMap = new HashMap<String, Object>();
		for (int i = 0; i < paramsNameAndValueList.size(); i++) {
			valueMap = paramsNameAndValueList.get(i);
			if (valueMap.get(paramName) != null) {
				resultString = valueMap.get(paramName).toString();
			}
		}
		return resultString;
	}

	/**
	 * 根据参数名称,获取参数实际值
	 * 
	 * @param paramName
	 * @return 参数实际值,类型为int
	 */
	public int getInt(String paramName) {

		int resultInt = 0;
		// 一条参数名称和实际值
		HashMap<String, Object> valueMap = new HashMap<String, Object>();
		for (int i = 0; i < paramsNameAndValueList.size(); i++) {
			valueMap = paramsNameAndValueList.get(i);
			if (valueMap.get(paramName) != null) {
				resultInt = Integer
						.parseInt(valueMap.get(paramName).toString());
			}
		}
		return resultInt;
	}

	/**
	 * 根据参数名称,获取参数实际值
	 * @param paramName
	 * @return 参数实际值,类型为对象
	 * @throws IllegalAccessException
	 * @throws InstantiationException
	 */
	public Object getObject(Class clazz) {

		Object obj = new Object();
		try {
			obj = clazz.newInstance();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
		// 获取属性集
		Field[] fields = clazz.getDeclaredFields();
		for (Iterator it = paramsNameAndValueList.iterator(); it.hasNext();) {
			HashMap tradetype = (HashMap) it.next();
			for (int i = 0; i <= fields.length - 1; i++) {
				//一条参数,包括名称、类型、值
				String paramName = fields[i].getName();
				String paramType = fields[i].getType().getName();
				Object paramValue = tradetype.get(paramName);
				if (tradetype.containsKey(paramName)) {
					try {
						if (paramValue != null) {
							if (paramType == "java.lang.String") {
								PropertyUtils.setProperty(obj,paramName,paramValue.toString());
							} else if (paramType == "java.lang.Integer" || paramType == "int") {
								PropertyUtils.setProperty(obj,paramName,new Integer(paramValue.toString()));
							}
						}
					} catch (InvocationTargetException e) {
						throw new RuntimeException(e);
					} catch (NoSuchMethodException e) {
						throw new RuntimeException(e);
					} catch (IllegalAccessException e) {
						throw new RuntimeException(e);
					}
				}
			}
		}
		return obj;
	}

}

2、参数文件
params.flds
userName,String
password,String
age,int
分享到:
评论

相关推荐

    弹出层表单提交数据完美解决

    弹出层表单提交数据完美解决弹出层表单提交数据完美解决弹出层表单提交数据完美解决弹出层表单提交数据完美解决

    JQuery以JSON方式提交数据到服务端示例代码

    JQuery将Ajax数据请求进行了封装,从而使得该操作实现起来容易许多。以往我们要写很多的代码来实现该功能,现在只需要调用$.ajax()... 首先,在客户端,通过JavaScript脚本将页面表单数据封装成JSON格式。GetJsonData

    PHP与Web页面交互 -PHP获取表单信息.ppt

    * * PHP与Web页面交互 -----PHP 获取表单信息1 课程内容 获取文本框的值 获取文件域的值 获取复选框的值 PHP获取表单信息 在Web开发过程中,表单提交是数据传输过程中很重要的一部分,作为以PHP为后台开发语言的...

    利用JS如何获取form表单数据

    本文主要给大家介绍的是关于利用JS获取form表单数据的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 方法如下: 1.有的时候想偷点懒,页面上有大量的表单提交数据,每次单独获取都比较...

    Spring MVC注解与数据绑定(含源码及结果图)

    1、有如下一个订单信息页面order.jsp(置于/WEB-INF/jsp目录下),按以下步骤实现一个使用POJO类型完成表单数据传输的SpringMVC数据绑定项目。 (1) 创建一个Order类来封装上述订单信息,其中各个属性的名称和数据类型...

    【Flask】学习——Web表单(普通表单和Flask-WTF)

    文章目录一、概述二、普通表单示例2.1 普通的表单2.2 ...在FLask中,为了处理web表单,一般使用Flask-WTF扩展,它封装了WTForms,并且它有验证表单数据的功能 二、普通表单示例 下面是使用普通方式实现的表单: 2.1 普

    录入一名学生信息1

    1_页面部分实现一个效果如下的表单2_在ServletDemo02中接收表单数据3_将表单数据封装在stu对象上4_调用业务层将stu携带的数据保存到DB中5_

    vue3-pro-table:一个基于ElementPlus封装的table列表页组件,将包含搜索、列表、分页等功能的页面封装成一个组件

    vue3-pro-table之前有一个是基于 vue2 开发的vue3-pro-table 是基于 vue3 开发一个基于 ElementPlus 封装的 table 列表页组件,将包含搜索、列表、分页等功能的页面封装成一个组件特性将搜索、列表、分页三者的交互...

    CRMEB_DT_v3.2.1.zip

    CRMEB 是基于Thinkphp6基础开发的以会员为中心的电商系统,开源版微信公众号商城和小程序商城数据同步,带积分、优惠券、秒杀、砍价、分销等功能,更是一套方便二次开发的商城框架(后台封装了独有快速创建表单功能...

    elsa:elsa(eleme simple admin)基于 element-ui 封装 el-form,el-table 等组件,用于快速开发后台管理页面

    :high_voltage: elsa(eleme simple admin)基于 element-ui 封装 el-form,el-table 等组件,适用于快速开发后台管理项目。 用法示例,见: Quickstart npm i elsa-vue -S // vue main.js import Vue from 'vue' ...

    CRMEB微信小程序商城系统

    CRMEB 是基于Thinkphp5基础开发的以会员为中心的电商系统,开源版微信公众号商城和小程序商城数据同步,带积分、优惠券、秒杀、砍价、分销等功能,更是一套方便二次开发的商城框架(后台封装了独有快速创建表单功能...

    公众号商城和小程序商城

    CRMEB 是基于Thinkphp5基础开发的以会员为中心的电商系统,开源版微信公众号商城和小程序商城数据同步,带积分、优惠券、秒杀、砍价、分销等功能,更是一套方便二次开发的商城框架(后台封装了独有快速创建表单功能...

    CRMEB微信商城小程序商城系统 v2.5.zip

    微信公众号商城和小程序商城数据同步,带积分、优惠券、秒杀、分销等功能,更是一套方便二次开发的商城框架(后台封装了独有快速创建表单功能,无需写表单页面、快速创建数据搜索和数据列表页、导出表格、系统权限...

    crmeb电商系统 v2.5.36 打通版

    CRMEB 是基于Thinkphp5基础开发的以会员为中心的电商系统,开源版微信公众号商城和小程序商城数据同步,带积分、优惠券、秒杀、砍价、分销等功能,更是一套方便二次开发的商城框架(后台封装了独有快速创建表单功能...

    如何根据业务封装自己的功能组件

    最近有幸在做一个管理系统采用的是vue+element-ui, 表单页面非常多, 而且都出奇的大,在多页面开发的时候做大表单的优缺点我大概先说一下, 我们的任务是, 基于现在的工具, 使他更简洁, 功能也不差, 而且更利于开发, ...

    SpringMVC+Mybatis 框架,非Mven版本,自带基本功能和教复杂的表单样例

    2、导入数据库,数据文件在sql目录下。 【亮点】 1、轻量级,dao层做了封装,将常见的操作封装在一个对象内 不需要写mapper接口,只要配置mapper.xml即可。 2、封装了可配置的Quartz定时器;分两个版本:一个基于...

    vue.js使用v-model实现表单元素(input) 双向数据绑定功能示例

    主要介绍了vue.js使用v-model实现表单元素(input) 双向数据绑定功能,结合完整实例形式分析了v-model实现表单input元素数据双向绑定相关操作技巧,需要的朋友可以参考下

    毕业设计基于Java的直播数据可视化系统前后端源码+项目部署说明.zip

    4. 根据用户权限级别的不同定制化展示内容,主要包括:左侧菜单、表单选项、数据展示页(列表页/图表页) 要使用的技术:MyBatis、Shiro、WebSocket、Quartz ### 项目简介 1. RESTful风格的前后端分离式开发 2. ...

    c# 自然框架源码 框架源码

    自然框架源码 自然框架是对现有框架、...分页控件(QuickPager)、查询控件、表单控件、数据显示控件、树,以及一些对基础控件的扩充功能的控件。 企业定制开发、CRM、CMS、网站后台管理、网站等数据库相关的项目。

    MVC WebApi 用户权限验证及授权DEMO

    5) 浏览器提交登录表单数据给Web服务器; 6) Web服务需要验证用户名和密码是否匹配,发送api请求给api服务器; 7) api用户账户服务根据用户名,读取存储在数据库中的用户资料,判断密码是否匹配; 7.1)如果...

Global site tag (gtag.js) - Google Analytics