Простой способ заполнения Javabeans на основе параметров запроса - PullRequest
7 голосов
/ 23 февраля 2011

У меня есть простой человек класса:

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>

и простой сервлет:

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

Ответы [ 2 ]

19 голосов
/ 23 февраля 2011

Для этого Apache Commons BeanUtils часто используется.

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

Вот и все.

Чтобы продвинуться дальше, вы можете принять MVC-фреймворк, который использует Javabeans в качестве моделей, чтобы вам вообще не приходилось о них беспокоиться, например, JSF или Spring MVC .


Не связанный с конкретным вопросом, использование getParameterValues() неуклюже в этом конкретном примере. Просто используйте getParameter().

p.setName(request.getParameter("name"));
p.setSecondname(request.getParameter("secondname"));
0 голосов
/ 08 сентября 2018

Еще один способ сделать это.SpringMvc может автоматически связать запрос для вас, но вы также можете сделать это вручную.

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