Easy way of populating Javabeans based on request parameters

孤街浪徒 提交于 2019-11-26 14:39:42

问题


I have a simple person class:

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;
    }

}

and a simple html page:

<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>

and a simple 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");
    }

}

Is there a way to automate the parameter setting?

Something magic like

    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");
    }

回答1:


For that Apache Commons BeanUtils is often used.

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

That's it.

To get a step further, you can adopt a MVC framework which uses Javabeans as models so that you don't need to worry about them at all, such as JSF or Spring MVC.


Unrelated to the concrete question, using getParameterValues() is clumsy in this specific example. Just use getParameter().

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



回答2:


Yet another way to do it. SpringMvc can auto bind the request for you, but you can also do it mannually.

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


来源:https://stackoverflow.com/questions/5096454/easy-way-of-populating-javabeans-based-on-request-parameters

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!