All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.j2mvc.framework.dao.callback.ObjectFieldsValue Maven / Gradle / Ivy

Go to download

强烈建议使用J2mvc 2.1以后的版本。 version 2.1.01 1.优化路径跳转,Servlet和Filter方式的路径设置 2.优化内存销毁 3.更换JSON依赖包 4.优化接收方法RequestMethod,封装不同ContentType格式提交 封装JSON,XML数据提交模块 JSON请求示例 { "id":"JSON134851", "title":"JSON提交的标题", "price":65.1, "stock":100 } XML请求示例 <!DOCTYPE root [ <!ELEMENT root ANY> <!ATTLIST Product SSN ID #REQUIRED>]> <root> <Product SSN='id'>XMLID12354</Product> <Product SSN='title'>XML提交的标题 </Product> <Product SSN='price'>55 </Product> <Product SSN='stock'>32 </Product> </root> version 2.1.02 1.解决URL无后缀情况无法加载静态资源,解决无法渲染CSS文件。 version 2.1.03 1.移除com.j2mvc.StringUtils.getUtf8()方法调用 更改为getCharset() version 2.1.04 1.去除Servlet和Filter的全局变量销毁,只交给Listener处理。 version 2.1.05,2.1.06,2.1.07 1.完善POST提交的JSON数据 支持接收基础数据类型、任意对象类型、任意数组类型。 不支持接收参数为集合类型或Map类型,但可以定义为接收对象类型的元素。 version 2.1.05,2.1.06,2.1.07 1.修改连接池变量 version 2.1.09 增加上传功能,修改RequestMethod,ContentType设置方式 version 2.1.10,2.1.11 更改上传文件名格式为UUID格式,移除JSON映射类,更改接收多文件上传。 version 2.1.12 删除文件列有的空对象 version 2.1.13 增加配置文件目录/conf,加载上传功能配置/conf/upload.properties version 2.1.18 拦截器也能获取ActionBean version 2.1.20 添加上传文件只读权限 version 2.1.21 支持同时接收文件和文本数据 version 2.1.22 增加文件接收类型media version 2.1.23 删除upload类printJson方法

The newest version!
package com.j2mvc.framework.dao.callback;

import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import com.j2mvc.framework.mapping.Column;
import com.j2mvc.framework.mapping.Foreign;
import com.j2mvc.framework.mapping.PrimaryKey;
import com.j2mvc.framework.mapping.Transient;
import com.j2mvc.framework.util.FieldUtil;

/**
 * 读取对象的值
 * 
 * @author 杨朔 2014年1月13日
 */
public class ObjectFieldsValue {
	static final Logger log = Logger.getLogger(ObjectFieldsValue.class);

	private Object object;

	/**
	 * 构造器
	 * 
	 * @param object
	 */
	public ObjectFieldsValue(Object object) {
		super();
		this.object = object;
	}

	/**
	 * 读取对象属性值
	 * 
	 *  Object[]
	 */
	public Object[] getValues(boolean addKey) {
		if (object == null)
			return null;
		List params = new ArrayList();
		Class clazz = object.getClass();
		// 主键
		PrimaryKey primaryKey = clazz.getAnnotation(PrimaryKey.class);

		List fields = FieldUtil.getFields(null, clazz);
		for (Field field : fields) {
			/* 注释字段,对应数据表字段 */
			Column column = field.getAnnotation(Column.class);
			/* 注释字段,对应关联对象字段 */
			Foreign foreign = field.getAnnotation(Foreign.class);
			/* 注释字段,对应临时对象字段 */
			Transient transient1 = field.getAnnotation(Transient.class);

			if (column != null && transient1 == null) {
				String name = field.getName();
				if (name.equals(primaryKey.name())) {
					if (primaryKey.autoIncrement()) {
						// 如果当前字段为主键,且自动增长,则忽略
						continue;
					} else {
						// 如果当前字段为主键,不为自动增长,主键不能为空
						Object value = getValue(name, clazz);
						value = value != null ? value : "";
						if (value.equals("")) {
							log.error("主键为空");
							return null;
						}
					}
				}
				Object value = getValue(name, clazz);
				if (foreign != null) {
					// 有关联对象,获取对象主键值
					Class foreignClass = field.getType();
					PrimaryKey foreignKey = foreignClass.getAnnotation(PrimaryKey.class);
					value = getValue(foreignKey.name(), foreignClass, value);
				}
				params.add(value);
			}

		}
		/* 如果最后需要增加主键值 */
		if (addKey) {
			Object value = getValue(primaryKey.name(), clazz);
			params.add(value);
		}
		return params != null ? params.toArray() : null;
	}

	/**
	 * 获取值
	 * 
	 * @param name
	 * @param clazz
	 */
	public Object getValue(String name, Class clazz) {
		// 获取值
		PropertyDescriptor pd;
		try {
			pd = new PropertyDescriptor(name, clazz);
			Method method = pd.getReadMethod();
			return method.invoke(object);
		} catch (IntrospectionException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 获取值
	 * 
	 * @param name
	 * @param clazz
	 * @param object
	 */
	public Object getValue(String name, Class clazz, Object object) {
		// 获取值
		PropertyDescriptor pd;
		try {
			pd = new PropertyDescriptor(name, clazz);
			Method method = pd.getReadMethod();
			return object != null ? method.invoke(object) : null;
		} catch (IntrospectionException e) {
			log.error(e.getMessage());
		} catch (IllegalArgumentException e) {
			log.error(e.getMessage());
		} catch (IllegalAccessException e) {
			log.error(e.getMessage());
		} catch (InvocationTargetException e) {
			log.error(e.getMessage());
		}
		return null;
	}
}