📄 dynamictvo.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 + -