2011-02-23 69 views
6

我有一个简单的Person类:简单的方法参数

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

这当然可以通过反射API来完成,但问题在于它没有比它的价值更麻烦,除非您经常遇到这种情况或者需要设置大量属性。另外请记住,您可能想要进行一些验证(“是给定的参数?”“是该字段有效的值?”) – johusman 2011-02-23 20:17:34

+1

为了您的理智,请将您的servlet重命名为'PersonServlet'或其他东西。 – Jeremy 2011-02-23 20:17:44

+0

谢谢johusman,我希望已经有东西了。验证和其他逻辑稍后将在类的实例上完成。 – Simon 2011-02-23 20:18:28

回答

17

对于Apache Commons BeanUtils经常被使用。

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

就是这样。

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


与具体问题无关,在这个具体例子中使用getParameterValues()是笨拙的。只需使用getParameter()即可。

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

谢谢,你真棒。 – Simon 2011-02-23 20:24:59

+0

不客气。 – BalusC 2011-02-23 20:33:37