zoukankan      html  css  js  c++  java
  • java中将param的值自动存到bean中

    转自: http://www.2cto.com/kf/201402/278960.html

    本文前提:参数名称与实体属性一致!

    Java的Web项目中,经常有servlet中接收参数赋值给实体,参数如果多了就很麻烦,这里提供两个简单通用的方法:

    比如实体为Student

    1.使用org.apache.commons.beanutils.BeanUtils:

      
      Student stu = new Student();
      BeanUtils.populate(stu, request.getParameterMap());

    当然实际工作中,有些参数值为空或者参数类型与实体属性类型不匹配,这就会报异常,因此这个不太可靠,这时可以用方法3

    2.利用反射:

    获得所有set方法,排除掉Object基类本身的set方法,从get方法中可以得到属性名,而属性名即是request的参数名

    import java.lang.reflect.Method;
    import java.util.Date;
     
    import javax.servlet.http.HttpServletRequest;
     
    import org.apache.commons.lang3.ArrayUtils;
    import org.apache.commons.lang3.StringUtils;
    import org.apache.commons.lang3.math.NumberUtils;
    import org.apache.commons.lang3.time.DateUtils;
     
    /**Servlet业务中实体工具
     * @author LiuDing
     * 2014-2-16-下午08:10:06
     */
    public class ServletBeanTools {
         
        /**自动匹配参数赋值到实体bean中
         * @author LiuDing
         * 2014-2-16 下午10:23:37
         * @param bean
         * @param request
         */
        public static void populate(Object bean, HttpServletRequest request){
            Class<!--? extends Object--> clazz = bean.getClass();
            Method ms[] = clazz.getDeclaredMethods();
            String mname;
            String field;
            String fieldType;
            String value;
            for(Method m : ms){
                mname = m.getName();
                if(!mname.startsWith("set")
                        || ArrayUtils.isEmpty(m.getParameterTypes())){
                    continue;
                }
                try{
                    field = mname.toLowerCase().charAt(3) + mname.substring(4, mname.length());
                    value = request.getParameter(field);
                    if(StringUtils.isEmpty(value)){
                        continue;
                    }
                    fieldType = m.getParameterTypes()[0].getName();
                    //以下可以确认value为String类型
                    if(String.class.getName().equals(fieldType)){
                        m.invoke(bean, (String)value);
                    }else if(Integer.class.getName().equals(fieldType) && NumberUtils.isDigits((String)value)){
                        m.invoke(bean, Integer.valueOf((String)value));
                    }else if(Short.class.getName().equals(fieldType) && NumberUtils.isDigits((String)value)){
                        m.invoke(bean, Short.valueOf((String)value));
                    }else if(Float.class.getName().equals(fieldType) && NumberUtils.isNumber((String)value)){
                        m.invoke(bean, Float.valueOf((String)value));
                    }else if(Double.class.getName().equals(fieldType) && NumberUtils.isNumber((String)value)){
                        m.invoke(bean, Double.valueOf((String)value));
                    }else if(Date.class.getName().equals(fieldType)){
                        m.invoke(bean, DateUtils.parseDate((String)value, "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss"));
                    }else{
                        m.invoke(bean, value);
                    }
                }catch(Exception e){
                    e.printStackTrace();
                    continue;
                }
            }
        }
    }

    Java中将param的值自动存到bean中

     
     
  • 相关阅读:
    ASP.NET:关于.net中的runat
    javascript/dom:原生的JS写选项卡方法
    深入学习javascript:cookie
    javascript练习:8综合练习
    javascript/dom:对样式进行操作
    C#:form的窗体属性formborderstyle设置为none后就不能移动了
    javascript/dom:获取CSS值/getComputedStyle方法
    【玩转.Net MF – 04】远程屏幕截图
    .Net Micro Framework V4.1 beta 发布
    RFID技术在.Net Micro Framework中的应用
  • 原文地址:https://www.cnblogs.com/mr-level/p/4553875.html
Copyright © 2011-2022 走看看