图像

请求参数自动填充Java对象 by Common BeanUtils

一般的java mvc框架都会有自动填充域模型属性的功能,实际上我们填充的是每一个域模型新建对象的属性值。
这个其实用的是java bean技术,什么是java bean自己去研究。

我们可以自己写个自动填充java bean属性的类,只是各个方面不一定考虑的全面,所以我们这里用拿来主义,
站在巨人的肩膀上解决问题,不需要从零开始自己写框架,我们使用Apache Jakarta Commons utility
工具包。

首先我们有一个java bean:

package com.connove.model;

public class Insurance {
  private String name;
  private String sid;
  private int numChild;
  private boolean isMarried;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getSid() {
    return sid;
  }
  public void setSid(String sid) {
    this.sid = sid;
  }
  public int getNumChild() {
    return numChild;
  }
  public void setNumChild(int numChild) {
    this.numChild = numChild;
  }
  public boolean isMarried() {
    return isMarried;
  }
  public void setMarried(boolean isMarried) {
    this.isMarried = isMarried;
  }
 
}

其次我们有一个form表单提交页面:

      <form class="form-horizontal" role="form" action="../hi" method="post">
        <div class="form-group">
          <label for="inputName" class="col-sm-4 control-label">Name</label>
          <div class="col-sm-8">
            <input type="text" class="form-control" id="inputName"
              placeholder="Name" name="name">
          </div>
        </div>
        <div class="form-group">
          <label for="inputSID" class="col-sm-4 control-label">SID</label>
          <div class="col-sm-8">
            <input type="text" class="form-control" id="inputSid"
              placeholder="SID" name="sid">
          </div>
        </div>
        <div class="form-group">
          <label for="inputNumChild" class="col-sm-4 control-label">Number of child</label>
          <div class="col-sm-8">
            <input type="text" class="form-control" id="numChild"
              placeholder="number of child" name="numChild">
          </div>
        </div>
        <div class="form-group">
          <div class="col-sm-offset-4 col-sm-8">
            <div class="checkbox">
              <label> <input type="checkbox" name="married" value="true"> Married?
              </label>
            </div>
          </div>
        </div>
        <div class="form-group">
          <div class="col-sm-offset-4 col-sm-8">
            <button type="submit" class="btn btn-default">Submit</button>
          </div>
        </div>
      </form>

再次是action:

    protected void doGet(HttpServletRequest request,
      HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();

    Insurance bean=new Insurance();
    try {
      BeanUtils.populate(bean, request.getParameterMap());
      out.println(bean.getName());
      out.println(bean.getSid());
      out.println(bean.getNumChild());
      out.println(bean.isMarried());
    } catch (IllegalAccessException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (InvocationTargetException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    out.close();
  }

测试结果如下:

    jerry
    52020198726661
    3
    true

2 thoughts on “请求参数自动填充Java对象 by Common BeanUtils

发表评论