2015-06-10 51 views
0

在post方法中接受參數「updateButton」和「reviewButton」。如果僅註冊params = {"reviewButton"}並單擊「reviewButton」,則request.getParameter ("reviewButton") == reviewButton,並且如果註冊getParameter的兩個參數返回空值。請求和按鈕在post方法中

如何確定哪個按鈕被按下?

<form action="update" name ="updateCourseDTO" " action='<@spring.url "/update" />' method="POST"/> 
    <fieldset> 
     <div class="control-group"> 
     <label class="control-label">Name</label> 
     <div class="controls"> 

     <@spring.formInput "updateCourseDTO.name" ""/> 
     <@spring.showErrors '<br>',"error" /> 

     </div> 
     </div> 
     <div class="control-group"> 
     <label class="control-label">Category</label> 
     <div class="controls"> 
      <@spring.formSingleSelect "updateCourseDTO.category" listCategories "" /> 
      <@spring.showErrors '<br>',"error" /> 
     </div> 
     </div> 

     <div class="control-group"> 
     <label class="control-label">Description</label> 
     <div class="controls"> 
      <@spring.formInput "updateCourseDTO.description"/> 
      <@spring.showErrors "updateCourseDTO.description","error" /> 
     </div> 
     </div> 
     <div class="control-group"> 
     <label class="control-label">Links</label> 
     <div class="controls"> 
     <@spring.formInput "updateCourseDTO.links"/> 
     <@spring.showErrors "updateCourseDTO.links","error" /> 
     </div> 
     </div> 
     <div class="control-group"> 
     <label class="control-label">Minimal Subscribers</label> 
     <div class="controls"> 

     <@spring.formInput "updateCourseDTO.minSubscribers" ""/> 
     <@spring.showErrors 'updateCourseDTO.minSubscribers',"error" /> 
     </div> 
     </div> 
     <div class="control-group"> 
     <label class="control-label">Minimal Attende</label> 
     <div class="controls"> 

     <@spring.formInput "updateCourseDTO.minAttendes" ""/> 
     <@spring.showErrors 'updateCourseDTO.minAttendes',"error" /> 
     </div> 
     </div> 
     <div class="form-actions" > 
     <button id="updateButton" name="updateButton" class="btn btn-primary" type="submit" >Update</button> 
     <button id="reviewButton" name="reviewButton" class="btn btn-warning" type="submit" >Review</button> 
     </div> 
    </fieldset> 
    </form> 

控制器

@RequestMapping(value = "/courses/{id}/update", method = RequestMethod.POST, params = { "updateButton", 
     "reviewButton" }) 
public String updateCoursePost(Model model, HttpSession session, 
     HttpServletRequest request, @PathVariable("id") Integer courseId, 
     @Valid UpdateCourseDTO updateCourseDTO, BindingResult result) 
     throws AddressException, Exception { 

     if (request.getParameter("updateButton") != null) {} 
     if (request.getParameter("reviewButton") != null) {} 

回答

1

正如我從documentation看到,params被縮小的映射。因此,通過指定params = { "updateButton", "reviewButton" },告訴Spring只有在兩個參數都出現在請求中時才映射方法,這是不可能的,因爲它不可能同時點擊兩個按鈕。所以,你要麼應該只是省略params追趕兩個按鈕的方法和做的選擇裏面的方法:

@RequestMapping(value = "/courses/{id}/update", method = RequestMethod.POST) 
public String updateCoursePost(Model model, HttpSession session, 
     HttpServletRequest request, @PathVariable("id") Integer courseId, 
     @Valid UpdateCourseDTO updateCourseDTO, BindingResult result) 
     throws AddressException, Exception 
{ 

     if (request.getParameter("updateButton") != null) {doUpdate(...);} 
     else if (request.getParameter("reviewButton") != null) {doReview(...);} 
     else {WHAAAT?!} 
} 

,或者如我願意,做兩種不同的方法:

@RequestMapping(value = "/courses/{id}/update", method = RequestMethod.POST, params = {"updateButton"}) 
public String updateCoursePost(Model model, HttpSession session, 
     HttpServletRequest request, @PathVariable("id") Integer courseId, 
     @Valid UpdateCourseDTO updateCourseDTO, BindingResult result) 
     throws AddressException, Exception 
{ 
      doUpdate(...); 
} 

@RequestMapping(value = "/courses/{id}/update", method = RequestMethod.POST, params = {"reviewButton"}) 
public String reviewCoursePost(Model model, HttpSession session, 
     HttpServletRequest request, @PathVariable("id") Integer courseId, 
     @Valid UpdateCourseDTO updateCourseDTO, BindingResult result) 
     throws AddressException, Exception 
{ 
      doReview(...); 
}