2011-02-23 115 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