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

📄 populationutils.java

📁 一个在线学习系统的服务端SERVLET程序
💻 JAVA
字号:
package eols.tools.binder;

/**
 * 根据HttpServletRequest中的参数值初始化指定的JavaBean对象, 并执行相应的类型转换工作.
 * 比如, 将字符串转换为int, double, boolean等.
 *
 * 本工具类主要用于减少各控制器类中取得各request参数的值的代码量, 特别是对于具有大量输入
 * 参数的表单而言, 这项工作更为必要. 另外, 虽然spring框架提供了有关的JavaBean初始化机制,
 * 但是, 该机制太复杂, 工作量依然很大. 因此, 编写了该工具类.
 *
 */

import java.util.Map;
import java.util.List;
import java.util.ArrayList;
import javax.servlet.ServletRequest;
import javax.servlet.ServletException;
import org.springframework.web.bind.BindInitializer;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
import org.springframework.beans.PropertyValue;
import org.springframework.beans.MutablePropertyValues;

import eols.tools.binder.BindException;
import eols.tools.*;

public final class PopulationUtils {
        /**
         * 根据request参数的值, 设置提供的JavaBean类的属性值, 并提供相应的类型转换功能.
         * 另外, 如果类型转换失败, 则将失败信息包装在提供的JavaBean中. 同时, 为了处理中
         * 文字符, 本方法还提供编码转换工作.
         *
         * 本方法返回一个bean实例.
         *
         * @param bean 需要设置属性值的JavaBean对象
         * @param request 包装了参数的ServletRequest对象
         * @param error 类型转换错误信息包装对象
         */
        public static BindException bind(ServletRequest request, Object bean, boolean isResultNeedTranslate) {
                CustomServletRequestDataBinder binder = new
                        CustomServletRequestDataBinder(bean, bean.getClass().getName());
                binder.bind(request, isResultNeedTranslate);
                return binder.getErrors();
        }


        /**
         * 根据request参数的值, 设置提供的JavaBean类的属性值, 并提供相应的类型转换功能.
         *
         * @param bean 需要设置属性值的JavaBean对象
         * @param request 包装了参数的ServletRequest对象
         * @param beanName 需要设置属性值的JavaBean对象的名称
         * @return 初始化异常
         */
        private static BindException bind(ServletRequest request, Object bean,
                                          String beanName, boolean isResultNeedTranslate) {
                CustomServletRequestDataBinder binder = new
                        CustomServletRequestDataBinder(bean, beanName);
                binder.bind(request, isResultNeedTranslate);
                return binder.getErrors();
        }

        /**
                 * 根据request参数的值, 设置提供的JavaBean类的属性值, 并提供相应的类型转换功能.
                 * 另外, 如果类型转换失败, 则将失败信息包装在提供的JavaBean中. 同时, 为了处理中
                 * 文字符, 本方法还提供编码转换工作.
                 *
                 * 本方法返回一个包装了bean实例数组的BindException对象. 本方法的工作流程是:
                 * (1) 取得给定属性名称数组的所有属性值(为一String数组)
                 * (2) 用这个属性值数组初始化给定bean实例对象状态
                 * (3) 返回包含了所有request属性值的bean实例对象数组
                 *
                 * @param beanClassName 需要设置属性值的JavaBean对象的类名称
                 * @param parameterNames 需要设置属性值的属性名称数组
                 * @param extraPropertyAndItsValue 需要额外设置的属性及其属性值
                 * @param request 包装了参数的ServletRequest对象
                 * @param ArrayListWrapper 结果包装类对象
                 */
                public static ArrayListWrapper bind(ServletRequest request, String beanClassName, String[] parameterNames,
                                                    PropertyValue extraPropertyAndItsValue) throws Exception {
                        // 结果包装对象
                        ArrayListWrapper resultWrapper = new ArrayListWrapper();
                        // 结果List
                        List result = new ArrayList();
                        // 绑定异常对象
                        FastStringBuffer errors = new FastStringBuffer();
                        // 给定属性名的属性值
                        Map valuesMap = WebUtils.getSpecifiedParameterValues(request, parameterNames);
                        if (valuesMap != null && valuesMap.size() > 0) {
                                // 取得用户输入数据的行数
                                int rowCount = 0;
                                if (valuesMap.get("rowCount")instanceof Integer) {

                                        rowCount = ( (Integer) valuesMap.get("rowCount")).intValue();

                                        int len = parameterNames.length;
                                        String value = null;
                                        PropertyValue propertyValue = null;
                                        MutablePropertyValues propertyValues = null;
                                        CustomServletRequestDataBinder binder = null;

                                        for (int i = 0; i < rowCount; i++) {
                                                propertyValues = new MutablePropertyValues();
                                                /** 设置用户提供的属性及其值 */
                                                if (extraPropertyAndItsValue != null) {
                                                        propertyValues.addPropertyValue(extraPropertyAndItsValue);
                                                }
                                                /** 构造绑定对象 */
                                                binder = new
                                                        CustomServletRequestDataBinder(Class.forName(beanClassName).newInstance(), beanClassName);
                                                /** 根据每一行的值绑定每一个实例对象 */
                                                for (int j = 0; j < len; j++) {
                                                        try {
                                                                value = ( (String[]) valuesMap.get(parameterNames[j]))[i];
                                                        }
                                                        catch (Exception e) {
                                                                /**忽略此异常*/
                                                                value = null;
                                                        }
                                                        propertyValue = new PropertyValue(parameterNames[j], value);
                                                        propertyValues.addPropertyValue(propertyValue);
                                                }
                                                /** bean 对象绑定 */
                                                binder.bind(propertyValues);
                                                /** 如果出现了绑定异常, 则纪录该异常, 否则, 将帮定好的bean实例对象加入到列表中 */
                                                if (binder.getErrors().getAllErrors().size() > 0) {
                                                        errors.append(binder.getErrors().getMessage());
                                                }
                                                else {
                                                        result.add(binder.getTarget());
                                                }
                                        }
                                }
                        }
                        resultWrapper.setErrors(errors.toString());
                        resultWrapper.setWrapperedList(result);
                        return resultWrapper;

        }

}

⌨️ 快捷键说明

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