2013-05-02 44 views
0

我剛開始使用Spring MVC,所以這可能是一個新手的錯誤。如何在Spring 3中重置ModelAttribute?

ModelAttribute被重用每個請求。我如何確保每個POST都以一個乾淨的對象開始?

我控制器(MyController.java):

@Controller 
public class MyController { 

    @RequestMapping(method = RequestMethod.POST) 
    public String processChoice(@ModelAttribute("myData") MyData myData, BindingResult bindingResult) { 
    System.out.println("POST: myData = " + myData); 
    return "redirect:/myview?choice=" + myData.getChoice(); 
    } 

    @RequestMapping(method = RequestMethod.GET) 
    public String displayChoice(@RequestParam(required = false) String choice, Model model) { 
    System.out.println("GET: Choice = " + choice); 
    model.addAttribute("myData", new MyData(choice)); 
    return "myview"; 
    } 

} 

我的視圖(myview.jsp):

<%@ page language="java" contentType="text/html; charset=UTF-8" 
pageEncoding="UTF-8"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>Spring Tests</title> 
    </head> 
    <body> 
    <form:form modelAttribute="myData" method="POST"> 
     <form:select path="choice"> 
     <option></option> 
     <option value="one">One</option> 
     <option value="two">Two</option> 
     </form:select> 
     <input type="submit" value="Choose"/> 
    </form:form> 
    <c:if test="${not empty myData.choice}">Choice = ${myData.choice}</c:if> 
    <c:if test="${empty myData.choice}">No choice</c:if> 
    </body> 
</html> 

上 「選擇」 連續點擊按鈕追加選擇的值而不是僅僅發佈當前版本:

GET: Choice = null 
POST: myData = MyData [choice=two] 
GET: Choice = two 
POST: myData = MyData [choice=two,one] 
GET: Choice = two,one 
POST: myData = MyData [choice=two,one,] 
GET: Choice = two,one, 
POST: myData = MyData [choice=two,one,,one] 
GET: Choice = two,one,,one 

回答

0

將此添加到您的控制器中:

@ModelAttribute("myData") 
public MyData getMyData() { 
    return new MyData(); 
} 
+0

它不起作用。該方法在每個GET和POST請求之前被調用,但它實際上不會重置該對象。 – Koohoolinn 2013-05-08 09:36:40

相關問題