/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.huahuan.servletutil;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.jplus.util.ConverString;
import org.jplus.util.FieldUtil;
import org.jplus.util.LoggerManage;
/**
* 表单的数据获得
*
* @author hyber-bin
* @version 1.2
*/
public class DataGet {
/**
* 空值列表 用于获取表单但表单值为空的放在这里 在数据库更新的时候做为标识
*/
private List<String> nullList;
private void setNullList(String fieldName) {
if (nullList == null) {
nullList = new ArrayList();
}
nullList.add(fieldName);
}
public List<String> getNullList() {
return nullList;
}
/**
* 类型转换,将字符类型转换为字段需要的类型
*
* @param field 成员变量
* @param value 字符串值
* @return
*/
public static Object parse(Field field, String value) {
return value == null ? null : ConverString.asType(field.getType(), value, null);
}
/**
* 根据参数名获得成员变量名
*
* @param parameterName 参数名
* @return
*/
public static String getFieldName(String parameterName) {
if (!parameterName.contains(".")) {
return parameterName;
} else {
String rStr = parameterName.substring(parameterName.indexOf('.') + 1);
if (rStr.contains(".")) {
LoggerManage.logger.getLogger("参数名称不合法,只能有一个点!" + parameterName, null);
return null;
}
return rStr;
}
}
/**
* 从request中获取表单数据到pojo类中 返回null证明没有获得成功返回true证明参数可以正常转换返回false证明获得了空值
*
* @param request HttpServletRequest
* @param formbean POJO类
* @param parameterName 参数名
* @param spaceIsNull 空格是否当null
*/
public static Boolean load(HttpServletRequest request, Object formbean, String parameterName, boolean spaceIsNull) {
if (parameterName.equals("mode")) {
return null;
}
try {
String rValue = request.getParameter(parameterName);
if (rValue != null && spaceIsNull && rValue.trim().equals("")) {
return false;
}
parameterName = getFieldName(parameterName);
Field field;
try {
field = formbean.getClass().getDeclaredField(parameterName);
} catch (NoSuchFieldException noSuchFieldException) {
return null;
} catch (SecurityException securityException) {
return null;
}
Object value = parse(field, rValue);
FieldUtil.setFieldValue(formbean, parameterName, value);
if (value == null) {
return false;
}
} catch (Exception ex) {
LoggerManage.logger.getLogger("从表单获得参数失败!" + parameterName, ex);
}
return null;
}
/**
* 将参数批量存入POJO类
*
* @param request HttpServletRequest
* @param formbean POJO类
* @param spaceIsNull 空格是否当null
*/
public static List<String> loadByParams(HttpServletRequest request, Object formbean, boolean spaceIsNull) {
Enumeration names = request.getParameterNames();
List<String> nullList = null;
while (names.hasMoreElements()) {
String name = (String) names.nextElement();
Boolean load = load(request, formbean, name, spaceIsNull);
if (load != null && !load) {
if (nullList == null) {
nullList = new ArrayList<String>();
}
nullList.add(name);
}
}
return nullList;
}
/**
* 将参数批量存入多个POJO类
*
* @param request HttpServletRequest
* @param beans POJO类数组
* @param spaceIsNull 空格是否当null
*/
public static void loadByParams(HttpServletRequest request, Object[] beans, boolean spaceIsNull) {
Enumeration names = request.getParameterNames();
while (names.hasMoreElements()) {
String name = (String) names.nextElement();
if (!name.contains(".")) {
LoggerManage.logger.getLogger("参数名称不合法,多个对象时参数没有加点!" + name, null);
continue;
}
String beanName = name.substring(0, name.indexOf("."));
load(request, findBean(beans, beanName), name, spaceIsNull);
}
}
/**
* 按照POJO类成员变量信息来从表单存入数据
*
* @param request HttpServletRequest
* @param formbean POJO类
* @param spaceIsNull 空格是否当null
*/
public static List<String> loadByBean(HttpServletRequest request, Object formbean, boolean spaceIsNull) {
Field[] fields = formbean.getClass().getDeclaredFields();
List<String> nullList = null;
for (Field field : fields) {
Boolean load = load(request, formbean, field.getName(), spaceIsNull);
if (load != null && !load) {
if (nullList == null) {
nullList = new ArrayList<String>();
}
if (request.getParameterMap().containsKey(field.getName())) {//如果有关于这个字段的就加
nullList.add(field.getName());
}
}
}
return nullList;
}
/**
* 根据名称找到类
*
* @param beans POJO类数组
* @param name 名称
* @return
*/
public static Object findBean(Object[] beans, String name) {
for (Object o : beans) {
if (o.getClass().getSimpleName().toLowerCase().equals(name)) {
return o;
}
}
return null;
}
}