`
忧里修斯
  • 浏览: 437094 次
  • 性别: 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
分享到:
评论

相关推荐

    Ajax 动态表单验证封装类附示例

    3. **数据序列化**:将表单数据转换为适合发送的格式,如JSON。 4. **处理响应**:接收服务器返回的验证结果,根据结果更新界面状态。 5. **错误处理**:捕获并处理可能发生的错误,如网络问题或服务器错误。 以下...

    表单数据传输方式

    - **隐藏数据**:POST方法将表单数据封装在HTTP请求的正文中,而不是像GET那样附加在URL后面。这意味着数据不会直接显示在URL中,提高了数据的私密性。 - **数据获取**:服务器端通过`Request.Form`来访问提交的数据...

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

    确保使用POST请求,并将表单数据序列化为JSON格式。 4. **异步处理**: 使用异步请求可以保持界面的响应性,同时显示加载指示器以告知用户数据正在处理。当服务器返回响应时,根据返回的状态码和消息进行相应的...

    Js封装的弹窗表单-xForm

    6. **AJAX提交**: 为了提供更好的用户体验,xForm可能会使用AJAX技术异步提交表单数据,这样无需刷新页面,用户就能看到反馈结果。 7. **响应式设计**: 现代网页需要适应不同设备和屏幕尺寸,xForm可能包含了响应式...

    FLASH as3表单到asp.net页面提交并接收数据

    在AS3中,你可以将表单数据封装成JSON或XML格式。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。XML(eXtensible Markup Language)则是一种更结构...

    form表单数据封装成json格式并提交给服务器的实现方法

    要将这些表单数据封装成JSON格式,我们需要在JavaScript中进行操作。我们可以使用`FormData`对象来获取表单中的所有数据,然后利用`jQuery`或者原生JavaScript的`querySelectorAll`等方法遍历表单元素,将每个字段的...

    Struts2五种数据封装Demo

    在这个“Struts2五种数据封装Demo”中,我们将深入探讨Struts2的数据封装机制,以及如何通过配置文件来操作Servlet的三大核心对象——Request、Session和Application。同时,我们还将了解如何从表单中获取数据并进行...

    struts2数据封装源码

    这个"struts2数据封装源码"很可能是为了演示如何在Struts2框架下处理用户输入数据并进行封装的过程。在Struts2中,数据封装是通过Action类和模型对象(通常称为POJOs,Plain Old Java Objects)来实现的,这使得业务...

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

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

    使用AJAX上传文件及表单数据

    这篇博客“使用AJAX上传文件及表单数据”主要讲解了如何利用AJAX实现文件和表单数据的异步提交,提高用户体验。下面我们将详细探讨这一主题。 首先,AJAX的核心是XMLHttpRequest对象,它提供了一种在后台与服务器...

    基于JavaBean的表单数据处理及结果同页显示技术.pdf

    【基于JavaBean的表单数据处理及结果同页显示技术】 在Web开发中,尤其是在B/S(Browser/Server,浏览器/服务器)架构下,表单数据处理和结果显示通常发生在两个不同的网页之间。用户在表单页面填写信息,提交后由...

    基于iview二次封装实用组件

    iview是一个流行的Vue.js UI框架,提供了丰富的预设组件,如按钮、表格、表单、模态框等,适用于快速构建企业级后台界面。然而,每个项目都有其特殊需求,直接使用iview可能无法完全满足。这就是进行二次封装的意义...

    jsp 应用获取表单元素

    \n\n - 页面转发与请求转发:如果表单提交方式为GET,表单数据会附加在URL后面;如果是POST,数据则包含在请求体中。JSP可以通过request.getRequestDispatcher()进行请求转发,保留表单数据。\n\n3. 处理多值参数:\...

    设置ecology-7流程表单的验证页面customePageSetting

    通过发送异步请求到服务器,我们可以验证表单数据的有效性,如检查用户名是否已存在,而无需刷新整个页面。在JavaScript中,可以使用`XMLHttpRequest`对象或者更高级的`fetch` API来实现这个功能。 4. **JS验证规则...

    ssh2的表单数据添加存储展示

    2. 设计对应的表单bean,用于封装前端提交的多表单数据。 3. 使用Spring配置数据库连接和事务管理。 4. 配置Hibernate实体类和映射文件,处理数据关联。 5. 在Action中使用Iterator遍历并处理多表单数据,调用...

    html表单和数据完整性

    - **`action`属性**:指定了处理表单数据的脚本或页面地址(URL)。当用户提交表单时,浏览器会将表单数据发送到这个URL指定的位置。 - **`enctype`属性**:定义了表单数据的编码方式。默认情况下,使用`application...

    jQuery手机端个人信息填写表单页面代码

    【jQuery手机端个人信息填写表单页面】是一款专为移动端设计的、简洁且具有美观界面的用户个人信息填写界面。此代码实现了一个完整的表单,让用户能够方便地输入和更新他们的个人资料。下面将详细介绍该表单页面的...

    金鹰asp超速入门视频教程-055.发送表单数据的方式.rar

    学习这个教程,你将了解到如何创建ASP表单,如何设置ACTION属性指定处理表单的ASP页面,以及如何在ASP页面中使用Request对象来接收和处理表单数据。"jy055.swf"可能是一个包含具体示例的Flash动画,帮助视觉化表单...

    java爬虫,调用接口抓取各个省份的地址表,调用自动化操作封装页面获取数据

    以上就是对“java爬虫,调用接口抓取各个省份的地址表,调用自动化操作封装页面获取数据”这一项目涉及的主要知识点的详解。在实际开发中,还需要结合具体的业务需求和接口文档,进行具体的功能设计和代码实现。

Global site tag (gtag.js) - Google Analytics