BeanUtils.copyProperties方法

        我们在写一个Java Web项目时,会用JavaBean与JSP整合的开发模式。当jsp页面是一个表单的话,会将表单数据提交给Servlet,servlet接收数据。我们一般用request.getParameter()方法获取jsp表单的数据,但是如果JavaBean的实体类中的属性值很多的时候,用这种方法就会很繁琐,表单属性太多,就会写很多request.getParameter字段,这个时候我建议用BeanUtils.copyProperties方法,会简化代码量。

        BeanUtils.copyProperties(a,b)

        将b的值赋给a。

下面给出个例子:

 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        User user = new User();
        user.setName(request.getParameter("name"));
        user.setSex(request.getParameter("sex"));
        user.setAdress(request.getParameter("adress"));
        user.setBirthday(request.getParameter("birthday"));
        user.setPasswoed(request.getParameter("password"));


        if (userService.register(user)){
            request.setAttribute("msg","注册成功,请登录!");
            request.getRequestDispatcher("/login.jsp").forward(request,response);
        }else {
            request.setAttribute("msg","用户名或地址重复,请重新填写!");
            request.getRequestDispatcher("/register.jsp").forward(request,response);
        }
    }

<c:if test="${!empty msg }">
    <div class="alert alert-success">${msg }</div>
</c:if>
<form method="post" action="/RegisterServlet">
    <table align="center" width="300" border="1" height="150">
        <tr>
            <td colspan="2" align="center"><b>注册页面</b></td>
        </tr>
        <tr>
            <td align="right">
                姓名:<input type="text" name="name" required="required"></td>
        </tr>
        <tr>
            <td align="right">
                性别:<input type="text" name="sex" required="required"></td>
        </tr>

        <tr>
            <td align="right">
                住址:<input type="text" name="adress" required="required"></td>
        </tr>
        <tr>
            <td align="right">
                生日:<input type="text" name="birthday" required="required"></td>
        </tr>
        <tr>
            <td align="right">
                密码:<input type="text" name="password" required="required"></td>
        </tr>
        <tr>
            <td colspan="2" align="center">
                <input type="submit"/>
            </td>
        </tr>
    </table>

</form>

 这是用request.getParameter()方法获取表单信息。

我们可以对他进行改写:

 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       User user=new User();
       try {
           BeanUtils.copyProperties(user,request.getParameterMap());
       }catch (IllegalAccessException e){
           e.printStackTrace();
       }catch (InvocationTargetException e){
           e.printStackTrace();
       }
        if (userService.register(user)){
            request.setAttribute("msg","注册成功,请登录!");
            request.getRequestDispatcher("/login.jsp").forward(request,response);
        }else {
            request.setAttribute("msg","用户名或地址重复,请重新填写!");
            request.getRequestDispatcher("/register.jsp").forward(request,response);
        }
    }

这样代码量就会少很多。

通过第三方工具类BeanUtils的copyProperties()方法,将所有信息封装到user对象中。user对象接下来会与数据库进行交互,如:

public  void addUser(User user)throws  SQLException{
        QueryRunner runner = new QueryRunner(C3p0Utils.getDataSource());
        String sql="insert into user (name,sex,adress,birthday,password) values (?,?,?,?,?)";
        runner.update(sql,user.getName(),user.getSex(),user.getAdress(),user.getBirthday(),user.getPassword());
    }

 综上,是BeanUtils.copyProperties方法的使用。

注意,使用BeanUtils.copyProperties方法时要导包

import org.apache.commons.dbutils.handlers.BeanHandler;

 这个包我放到下面的链接:

链接:https://pan.baidu.com/s/1E6qhbWFm0_jEYyiLctgVUw 
提取码:pn8k

 

 通过BeanUtils自动将提交的数据封装到对象中,需要的jar包:

commons-beanutils-1.9.3.jar

该包需要,两个jar包的支持: 

commons-collections-3.2.2.jar

commons-logging-1.2.jar

这三个包需要一起导入,否则报错!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值