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

📄 dynamictvo.java

📁 一个基于Java的新闻发布系统
💻 JAVA
字号:
/*
 * Title: The  System of kelamayi Downhole Company [PMIP]
 * 
 * Copyright: Copyright 2005 
 * 
 * Company: hope Co., Ltd
 * 
 * All right reserved.
 * 
 * Created on 2005-12-13
 * 
 * JDK version used	:1.4.1
 * 
 * Modification history:
 * 
 * Struts.com.hope.common.util.parseVO.DynamicTVO Author :LiuHongDe(刘宏德)
 * 
 * Struts.com.hope.common.util.parseVO.DynamicTVO Version 1.0
 */
package com.hope.common.util.parseVO;

import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.validator.DynaValidatorForm;
/**
 * 
 * @version Version 1.0 
 * @author 刘宏德
 */
public class DynamicTVO {
	/**
	 * Logger for this class
	 */
	private static final Logger logger = Logger.getLogger(DynamicTVO.class);

	/**
	 * 页面数据转换道vo中
	 *   
	 * @param pro start页面中的属性 not NULL
	 * @param from ActionForm not NULL
	 * @param obj 要返回的值对象vo not NULL
	 * @return obj 要返回的值对象vo
	 * 处理逻辑:<br>
	 * 无
	 * <br>
	 * Object
	 * Method Name:com.hope.common.util.parseVO.dynamicToVO<br>
	 * DynamicTVO.java Version 1.0<br>
	 * DynamicTVO<br>
	 */
	public static Object dynamicToVO(
		String[] pro,
		ActionForm form,
		Object obj) {
		//保证三个参数不为空
		if (obj == null || form == null || pro == null || pro.length < 0)
			return null;
		//得到值对象vo的类型
		Class cClazz = obj.getClass();
		try {
			//把页面上的每个属性值放到值对象vo中,所以循环参数数组,把每个参数属性值取出
			for (int i = 0; i < pro.length; i++) {
				System.out.println("@@@@@@@@@@@@@@:" + pro[i]);
				//每个参数名称必须不为空字符串
				if (pro[i].length() > 0) {
					//把属性的第一个字符大写,因为在get,set方法中的get,set方法名称是***+
					//以大写字符开头的属性
					String wfield =
						pro[i].substring(0, 1).toUpperCase()
							+ pro[i].substring(1);
					//获取值对象vo中页面属性get方法中参数的类型
					Class[] pClass =
						{
							cClazz
								.getMethod(
									ValueObjectUtil.getMethodName(wfield),
									null)
								.getReturnType()};
					//获取值对象vo页面属性的方法
					Method cMethod = null;
					cMethod =
						cClazz.getMethod(
							ValueObjectUtil.getSetterMethodName(wfield),
							pClass);
					//方法不能为空
					if (cMethod != null) {
						//获取值对象vo中页面属性get方法中参数的类型
						Class proType =
							cClazz
								.getMethod(
									ValueObjectUtil.getMethodName(wfield),
									null)
								.getReturnType();
						//把form中的相对应的属性值转换为对象
						String value =
							((DynaValidatorForm) form).getString(pro[i]);
						if (value != null && value.length() > 0) {
							System.out.println("@@@@@@@@@@@@@@:" + value);
							Object objp =
								ValueObjectUtil.typeCast(
									value,
									String.class,
									proType);
							//为值对象方法复职
							ValueObjectUtil.invoke(
								obj,
								cMethod,
								new Object[] { objp });
						}
					}
				}
			}
		} catch (Exception e) {
			/**  Aoto catch cake<br>
			 * 说明:<br>
			 */
			e.printStackTrace();
		}
		return obj;
	}

	public static void main(String[] args) {
		NameFrom form = new NameFrom();
		form =
			(NameFrom) DynamicTVO.dynamicToVO(
				new String[] { "ddd", "age" },
				null,
				form);
		System.out.println(form.getDdd());
		System.out.println(form.getAge());
		System.out.println("!!!!!!!!!!!!");
	}

	/**
	 * 把查询出来的记录集转换道我们相对想的对象DTO中,并把这个List DTO返回
	 * 
	 * 第二次修改是因为查询出的结构集中的字段少于我们对象中的字段,为了优化性能,如果记录机中不参在次数据,
	 * 就跳出循环.
	 * @param rs 查询结果ResultSet记录集
	 * @param vo 业务对象(是记录集容器)
	 * @return   返回List类型的业务对象
	 * 处理逻辑:<br>
	 * 1.   判断用户传给方法的两个参数(ResultSet rs[查询结果记录集], Object vo[业务对象])不为空,
	 * 		如果为空中断程序,返回null.
	 * 2.	循环记录集中的每一条记录.
	 * 3.	得到业务对象类型的一个实例:  Object vvo.
	 * 4.	得到业务对象中的方法数组:  Method[] fMethods.
	 * 5.	判断并保证业务对象方法数据不为空或方法个数大于1.否则中断本方法,返回NULL
	 * 6.	得到业务对象类型:  Class cClazz .
	 * 7.	循环业务对象方法数组(8~15),把所有对象方法都进行一下处理;
	 * 8.	定义并获取方法名称:  String wmName .
	 * 9.	方法不许是serXXX方法,否则跳出本次循环.
	 * 10.	得到方法的参数类型数组:  Class[] pClass .
	 * 11.	得到方法的一个对象.
	 * 12.	保证这个方法对象不为空,否则跳出本次循环
	 * 13.	组织获取rs对象字段的字符串
	 * 14.	获取数据,并保证数据不为空.
	 * 15.	为业务对象方法赋值.
	 * <br>
	 * List
	 * Method Name:com.hope.common.util.parseVO.rsTovo<br>
	 * DynamicTVO.java Version 1.2<br>
	 * DynamicTVO<br>
	 */
	public static List rsTovo(ResultSet rs, Object vo) {
		if (rs == null || vo == null)
			return null;
		List list = new ArrayList();
		try {
			while (rs.next()) {
				Object vvo = vo.getClass().newInstance();
				Method[] fMethods = vvo.getClass().getMethods();
				if (fMethods == null || fMethods.length == 0) {
					return null;
				}
				Class cClazz = vvo.getClass();
				for (int i = 0; i < fMethods.length; i++) {
					String wmName = fMethods[i].getName();
					if (!wmName.startsWith("set")) {
						continue;
					}
					String xiao =
						wmName.substring(3, 4).toLowerCase()
							+ wmName.substring(4);
					String value;
					try {
						value = rs.getString(xiao);
						if (value == null) {
							continue;
						}
					} catch (Exception e1) {
						continue;
					}
					try {
						//获取值对象vo中页面属性get方法中参数的类型
						Class[] pClass =
							{
								cClazz
									.getMethod(
										ValueObjectUtil.getMethodName(
											wmName.substring(3)),
										null)
									.getReturnType()};
						Method cMethod = null;
						cMethod =
							cClazz.getMethod(
								ValueObjectUtil.getSetterMethodName(
									wmName.substring(3)),
								pClass);
						if (cMethod == null) {
							/**  logger */
							logger.info("cClass cMenthod is null !!!");
							continue;
						}
						if (value != null) {
							//获取值对象vo中页面属性get方法中参数的类型
							Class proType =
								cClazz
									.getMethod(
										ValueObjectUtil.getMethodName(
											wmName.substring(3)),
										null)
									.getReturnType();
							//把form中的相对应的属性值转换为对象
							Object objp =
								ValueObjectUtil.typeCast(
									value,
									String.class,
									proType);
							//为值对象方法复职
							ValueObjectUtil.invoke(
								vvo,
								cMethod,
								new Object[] { objp });

						}
					} catch (SecurityException e) {
						/**  Aoto catch cake<br>
						 * 说明:<br>
						 */
						e.printStackTrace();
					} catch (NoSuchMethodException e) {
						/**  Aoto catch cake<br>
						 * 说明:<br>
						 */
						e.printStackTrace();
					} catch (Exception e) {
						/**  Aoto catch cake<br>
						 * 说明:<br>
						 */
						e.printStackTrace();
					}

				}
				list.add(vvo);
			}

			return list;
		} catch (SQLException e) {
			/**  Aoto catch cake<br>
			 * 说明:<br>
			 */
			e.printStackTrace();
		} catch (InstantiationException e) {
			/**  Aoto catch cake<br>
			 * 说明:<br>
			 */
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			/**  Aoto catch cake<br>
			 * 说明:<br>
			 */
			e.printStackTrace();
		}
		return null;
	}

/**
 * 把对象中的数据封装到form中
 * 
 * @param pro
 * @param form
 * @param obj
 * @return
 * 处理逻辑:<br>
 * 无
 * <br>
 * Object
 * Method Name:com.hope.common.util.parseVO.voToform<br>
 * DynamicTVO.java Version 1.0<br>
 * DynamicTVO<br>
 */
	public static Object voToform(String[] pro, ActionForm form, Object obj) {
		//保证三个参数不为空
		if (obj == null || form == null || pro == null || pro.length < 0)
			return null;
		//得到值对象vo的类型
		Class cClazz = obj.getClass();
		try {
			//把页面上的每个属性值放到值对象vo中,所以循环参数数组,把每个参数属性值取出
			for (int i = 0; i < pro.length; i++) {
				((DynaValidatorForm) form).set(pro[i], "");
				//每个参数名称必须不为空字符串
				if (pro[i].length() > 0) {
					//把属性的第一个字符大写,因为在get,set方法中的get,set方法名称是***+
					//以大写字符开头的属性
					String wfield =
						pro[i].substring(0, 1).toUpperCase()
							+ pro[i].substring(1);
					//获取值对象vo页面属性的方法
					Method cMethod = null;
					cMethod =
						cClazz.getMethod(
							ValueObjectUtil.getMethodName(wfield),
							null);
					//方法不能为空
					if (cMethod != null) {
						//获取值对象vo中页面属性get方法中参数的类型
						Class proType =
							cClazz
								.getMethod(
									ValueObjectUtil.getMethodName(wfield),
									null)
								.getReturnType();
						Object value =
							ValueObjectUtil.typeCast(
								ValueObjectUtil.invoke(obj, cMethod, null),
								proType,
								String.class);
						if (value != null) {
							//为值对象方法复职
							 ((DynaValidatorForm) form).set(pro[i], value);
						}
					}
				}
			}
		} catch (Exception e) {
			/**  Aoto catch cake<br>
			 * 说明:<br>
			 */
			e.printStackTrace();
		}
		return form;
	}
}

⌨️ 快捷键说明

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