【问题标题】:Easy way of populating Javabeans based on request parameters根据请求参数填充 Javabean 的简单方法
【发布时间】:2011-02-23 20:08:19
【问题描述】:

我有一个简单的人类:

package simpleApp.entities;

public class Person {
    private String name;
    private String secondname;

    public void setSecondname(String cognome) {
        this.secondname = cognome;
    }
    public String getSecondname() {
        return secondname;
    }
    public void setName(String nome) {
        this.name = nome;
    }
    public String getName() {
        return name;
    }

}

还有一个简单的html页面:

<html>
<body>

    <form action="/simpleApp/person/" method="POST">
        name: <input type="text" name="name"><br>
        second name: <input type="text" name="secondname"><br>
        <input type="submit">
    </form>

</body>
</html>

还有一个简单的 servlet:

public class Person extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public Person() {
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //LOOK HERE:
        simpleApp.entities.Person p = new simpleApp.entities.Person();

        p.setName(request.getParameterValues("name")[0]);
        p.setSecondname(request.getParameterValues("secondname")[0]);

        response.sendRedirect("/simpleApp/index.html");
    }

}

有没有办法自动设置参数?

像魔法一样的东西

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        simpleApp.entities.Person p = new simpleApp.entities.Person();

        Magic.justSetEverything(p, request);

//      NOT NEEDED ANYMORE!!! MUAHAHAHA more time for coffee
//      p.setName(request.getParameterValues("name")[0]);
//      p.setSecondname(request.getParameterValues("secondname")[0]);

        response.sendRedirect("/simpleApp/index.html");
    }

【问题讨论】:

  • 这当然可以通过反射 API 来完成,但问题是它是否比它的价值更麻烦,除非你经常遇到这种情况或有大量的属性要设置。另外请记住,您可能想要进行一些验证(“是否给出了参数?”“该字段的值是否有效?”)
  • 为了您的理智,请将您的 servlet 重命名为 PersonServlet 或其他名称。
  • 谢谢johusman,我希望已经有了一些东西。验证和其他逻辑稍后在类的实例上完成。
  • Jeremy,这只是我专门为这篇 SO 帖子写的一个例子 :)

标签: java forms servlets javabeans


【解决方案1】:

为此经常使用Apache Commons BeanUtils

BeanUtils.populate(bean, request.getParameterMap());

就是这样。

为了更进一步,您可以采用使用 Javabeans 作为模型的 MVC 框架,这样您就完全不必担心它们,例如 JSFSpring MVC


与具体问题无关,在此具体示例中使用 getParameterValues() 很笨拙。只需使用getParameter()

p.setName(request.getParameter("name"));
p.setSecondname(request.getParameter("secondname"));

【讨论】:

    【解决方案2】:

    还有另一种方法。 SpringMvc 可以为你自动绑定请求,你也可以手动绑定。

    final WebRequest servletWebRequest = new ServletWebRequest(request);
    final WebRequestDataBinder binder = new WebRequestDataBinder(bean);
    binder.bind(servletWebRequest);
    

    【讨论】:

      猜你喜欢
      • 2010-10-27
      • 1970-01-01
      • 2015-05-28
      • 1970-01-01
      • 1970-01-01
      • 2019-06-08
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多