⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gdinfoinandout.java

📁 j2ee程序。 spring、xml、 实现增加内容选项。
💻 JAVA
字号:
package com.gd.mvc.io.impl;

import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.gd.mvc.exception.VODataValidate;
import com.gd.mvc.exception.VOGdException;
import com.gd.mvc.io.InfoInAndOut;

public class GdInfoInAndOut implements InfoInAndOut{
	private HttpServletRequest req = null;
	private HttpServletResponse res = null;
	private Map infoIn = new HashMap();
	private List voId = new ArrayList();//获取Xml中设定的voId
    private List voClass = new ArrayList();//获取Xml中设定的voClass
    private List voType = new ArrayList();//获取Xml中设定的voType
    private List voValidate = new ArrayList();//获取Xml中设定的voValidate
    /**
     * 构造函数
     * @throws Exception
     */
    public GdInfoInAndOut() throws Exception {
	}
    /**
     * 构造函数
     * @param req
     * @param res
     * @throws Exception
     */
    public GdInfoInAndOut(HttpServletRequest req, HttpServletResponse res) throws Exception {
		this.req = req;
		this.res = res;
		this.infoIn = this.getRequestToMap(req);
	}
	/**
	 * 构造函数
	 * @param req
	 * @param res
	 * @param voId
	 * @param voClass
	 * @param voType
	 * @param voValidate
	 * @throws Exception
	 */
	public GdInfoInAndOut(HttpServletRequest req, HttpServletResponse res, List voId, List voClass, List voType, List voValidate) throws Exception {
		this.req = req;
		this.res = res;
		this.voId = voId;
		this.voClass = voClass;
		this.voType = voType;
		this.voValidate = voValidate;
		this.infoIn = this.getRequestToMap(req);
	}
	/**
	 * 将页面中所有元素放在HashMap中
	 * @param req
	 * @return HashMap
	 * @throws Exception
	 */
	private HashMap getRequestToMap(HttpServletRequest req) throws Exception {
		req.setCharacterEncoding("GBK");
		HashMap infoIn = new HashMap();
		for (Enumeration e = req.getParameterNames(); e.hasMoreElements();) {//获取页面中所有元素名
			String strName = (String)e.nextElement();
			String[] values = (String[]) req.getParameterValues(strName);//根据名称获取对应的值
			if (values == null) {//假如没有值
			    infoIn.put(strName, "");
			} else if (values.length == 1) {//假如只有一个值
				infoIn.put(strName, values[0]);
			} else {//假如有多个值
				infoIn.put(strName, values);
			}
		}
		return infoIn;
	}
	
	/**
     * 同Map的get(Object obj)用法
     * @param obj   Object
     * @return Object
     */
	public Object get(Object obj) {
		return this.infoIn.get(obj);
	}
	
	/**
     * 同Map的put(Object key, Object value)用法
     * 将value存入key的map中
     * @param Object key
     * @param Object value
     * 
     */
	public void put(Object key, Object value) {
		this.infoIn.put(key, value);
	}
	
	/**
     * 同HttpServletRequest的getParameter(String fieldName)方法
     * @param fieldName     页面中元素名称
     * @return  返回页面中元素名称的value
     */
	public String getParameter(String fieldName) {
		return req.getParameter(fieldName);
	}
	
	/**
     * 同HttpServletRequest的getParameterNames方法
     * @return  返回页面中所有元素的名称
     */
	public Enumeration getParameterNames() {
		return req.getParameterNames();
	}

	/**
     * 同HttpServletRequest的getParameterValues(String fieldName)方法
     * @param fieldName     页面中元素名称
     * @return  返回页面中所有元素名称的所有值,以数组的方式存放。
     */
	public String[] getParameterValues(String fieldName) {
		return req.getParameterValues(fieldName);
	}

	/**
     * 同HttpServletRequest的getQueryString()方法
     * @return  请求网址的QueryString
     */
	public String getQueryString() {
		return req.getQueryString();
	}
	
	/**
     * 根据xml中path中指定的valueObject的id,将页面上所有以
     * valueObject的id的结尾的元素的值转换成为VO.如在Xml配置了多个valueObject,则只取第一个
     * @return  Object
     */
	public Object getVO() throws Exception {
		Object objVo = null;
		int i = 0;
		for (i = 0; voType.size() > i; i++) {
			//判断是否为单笔VO,如在Xml配置了多个valueObject,则只取第一个
			if (((String)voType.get(i)).equals("single")) {
				break;
			}
		}
		//通过带参数的getVO获取值
		objVo = this.getVO((String)voId.get(i), i);
		return objVo;
	}
	
	/**
     * 根据xml中path中指定的valueObject的id,将页面上所有以
     * valueObject的id的结尾的元素的值转换成为VO.
     * @return  Object
     */
	public Object getVO(String id) throws Exception {
		Object objVo = null;
		int i = 0;
		for (i = 0; voId.size() > i; i++) {
			//判断是否为单笔VO,且传来的id是否和XMl中的Id一致
			if (((String)voId.get(i)).equals(id) && ((String)voType.get(i)).equals("single")) {
				break;
			}
		}
		objVo = this.getVO(id, i);
		return objVo;
	}
	
	/**
     * 根据xml中path中指定的valueObject的id,和设定valueObject的数量,将页面上所有以
     * valueObject的id的结尾的元素的值转换成为VO.
     * @return  Object
     */
	private Object getVO(String id, int i) throws Exception{
		Object objVo = null;
		//如果Xml中配置的id不为空
		if (voId.size() != 0) {
			if(!"single".equals((String)voType.get(i))) {
				throw new VOGdException("进行单笔转换时,type必须设定为single");
			}
			if(!id.equals((String)voId.get(i))) {
				throw new VOGdException("进行单笔转换时,请确认输入的id是否和single对应,id=" + id);
			}
			Class classVo = Class.forName((String)voClass.get(i));
			objVo = (Object)classVo.newInstance();//获取该id对应Class的实例
			String strName = "";
			String propName = "";
			for (Enumeration e = req.getParameterNames(); e.hasMoreElements();) {//获取页面中所有的元素名
			    strName = (String)e.nextElement();
			    if(strName.endsWith("_" + (String)voId.get(i))) {//假如元素名的后缀为_+XMl中设定的id
			    	propName = strName.substring(0,1).toUpperCase() + strName.substring(1, strName.lastIndexOf("_"));//将名称转换为set+首字母大写的方法名
			    	Method mtdVo = classVo.getMethod("set" + propName, new Class[]{String.class});
			    	try {
			    		mtdVo.invoke(objVo, req.getParameterValues(strName));//将该对应的值注入VO对应的set方法里
			    	} catch (IllegalArgumentException ex) {
			    		throw ex;
			    	}
			    }
			}
			//假如Xml中设定了验证VO
			String action = infoIn.get("action") == null ? "" : (String)infoIn.get("action");
			if (!"".equals(action) && voValidate.get(i) != null && "Y".equals(((String)voValidate.get(i)).toUpperCase())) {
				try {
		    		Method[] mtdVos = classVo.getMethods();//获取该VO的所有方法
		    		for (int m = 0; mtdVos.length > m; m++) {
		    			if ("validate".equals(mtdVos[m].getName())) {//假如VO中设定了validate方法
		    				Method mtdVo = classVo.getMethod("validate", null);
		    	    		String msg = (String)mtdVo.invoke(objVo, null);//则执行validate方法,并返回验证信息
		    	    		if (!"".equals(msg)) {
		    	    			throw new VODataValidate(msg);//如果验证结果有问题,则抛VODataValidate。
		    	    		}
		    	    		break;
		    			}
		    		}
		    	} catch (IllegalArgumentException ex) {
		    		throw ex;
		    	}
			}
		} else {
			throw new VOGdException("配置文档Xml中必须设定valueObject");
		}
		return objVo;
	}

	/**
     * 根据指定的复选框名称checkFieldName,将选中的元素的值转换成为VO,存入List中返回,VO中的属性值不能以数字结尾
     * @return  Object
     */
	public List getVOs(String checkFieldName) throws Exception {
		List list = new ArrayList();
		int i = 0;
		for (i = 0; voType.size() > i; i++) {
			//判断是否为多笔VO,如在Xml配置了多个valueObject,则只取第一个
			if (((String)voType.get(i)).equals("many")) {
				break;
			}
		}
		//通过带参数的getVOs来获取List
		list = this.getVOs((String)voId.get(i), checkFieldName, i);
		return list;
	}

	/**
     * 根据指定的复选框名称checkFieldName,将选中的元素的值转换成为VO,存入List中返回,VO中的属性值不能以数字结尾
     * @return  Object
     */
	public List getVOs(String id, String checkFieldName) throws Exception {
		List list = new ArrayList();
		
		int i = 0;
		for (i = 0; voId.size() > i; i++) {
			//判断是否为多笔VO,且传来的id是否和XMl中的Id一致
			if (((String)voId.get(i)).equals(id) && ((String)voType.get(i)).equals("many")) {
				break;
			}
		}
		list = this.getVOs(id, checkFieldName, i);
		return list;
	}
	
	/**
     * 根据指定的复选框名称checkFieldName,将选中的元素的值转换成为VO,存入List中返回,VO中的属性值不能以数字结尾
     * @return  Object
     */
	private List getVOs(String id, String checkFieldName, int j) throws Exception {
		List list = null;
		//如果Xml中配置的id不为空
		if (voId.size() != 0) {
			list = new ArrayList();
			if(!"many".equals((String)voType.get(j))) {
				throw new VOGdException("进行多笔转换时,type必须设定为many");
			}
			if(!id.equals((String)voId.get(j))) {
				throw new VOGdException("进行多笔转换时,请确认输入的id是否和many对应,id=" + id);
			}
			String[] chk = req.getParameterValues(checkFieldName);//获取所有被选中的名称为checkFieldName的值
			Class classVo = Class.forName((String)voClass.get(j));
			Object objVo = null;//获取该id对应Class的实例
			String strName = "";
			String propName = "";
			String index = "";
			for(int i = 0; chk != null && i < chk.length; i++) {//对选中的值进行循环
				objVo = (Object)classVo.newInstance();//获取该id对应Class的实例
				index = chk[i];//选中的check的值为流水号
				for (Enumeration e = req.getParameterNames(); e.hasMoreElements() ;) {
				    strName = (String)e.nextElement();
				    if(strName.endsWith(index + "_" + (String)voId.get(j))) {//假如元素名的后缀为_+XMl中设定的id
				    	String temp = strName.split(index + "_" + (String)voId.get(j))[0];
				    	//判断元素名称除去流水号外的最后一个字母是否为数字,如果是数字,则不合法
				    	if(temp.substring(temp.length()-1).compareTo("0") >= 0 && temp.substring(temp.length()-1).compareTo("9") <= 0)
				    		continue;
				    	propName = strName.substring(0,1).toUpperCase() + strName.substring(1,strName.lastIndexOf(index + "_"));;
				    	Method mtdVo = classVo.getMethod("set" + propName, new Class[]{String.class});
				    	mtdVo.invoke(objVo, req.getParameterValues(strName));//将该对应的值注入VO对应的set方法里
					}
				}
				//假如Xml中设定了验证VO
				String action = infoIn.get("action") == null ? "" : (String)infoIn.get("action");
				if (!"".equals(action) && voValidate.get(i) != null && "Y".equals(((String)voValidate.get(i)).toUpperCase())) {
					try {
			    		Method[] mtdVos = classVo.getMethods();//获取该VO的所有方法
			    		for (int m = 0; mtdVos.length > m; m++) {
			    			if ("validate".equals(mtdVos[m].getName())) {//假如VO中设定了validate方法
			    				Method mtdVo = classVo.getMethod("validate", null);
			    	    		String msg = (String)mtdVo.invoke(objVo, null);//则执行validate方法,并返回验证信息
			    	    		if (!"".equals(msg)) {
			    	    			throw new VODataValidate(msg);//如果验证结果有问题,则抛VODataValidate。
			    	    		}
			    	    		break;
			    			}
			    		}
			    	} catch (IllegalArgumentException ex) {
			    		throw ex;
			    	}
				}
				list.add(objVo);
			}
		} else {
			throw new VOGdException("配置文档Xml中必须设定valueObject");
		}
		return list;
	}

	/**
     * 得到HttpServletRequest对象
     * @return HttpServletRequest对象
     * @throws Exception
     */
	public HttpServletRequest getHttpServletRequest() throws Exception {
		return this.req;
	}

	/**
     * 得到HttpServletResponse对象
     * @return HttpServletResponse对象
     * @throws Exception
     */
	public HttpServletResponse getHttpServletReponse() throws Exception {
		return this.res;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -