2010-11-05 45 views
1

這裏是Spring的新手,在閱讀參考文檔之後,驗證簡單Web表單的工作流程並未出現在我面前。嘗試瞭解使用Spring進行基本表單驗證的工作流程

有人可以給我一個初學者的概述,瞭解我們如何在Spring 3.0.3中進行表單驗證(我在現在正在遷移的webapp中使用了註釋和XML配置的混合)。從控制器開始,會發生什麼?

例如:到目前爲止,我認爲我應該將表單數據「綁定」到創建的對象(例如MyPerson),然後創建一個接受MyPerson並使用ValidationUtils執行驗證的Validation對象。

但是我的頭腦裏總是非常模糊(特別是「綁定」概念),並且從之前通過它的人那裏一步一步回顧工作流程會幫助我確信自己不會錯過或錯過 - 解釋任何步驟。

回答

2

您提到的用於驗證表單的方法是您可用的幾個選項之一。

除了您建議的方法之外,您可能還希望使用適當的實現(例如Hibernate Validator)使用JSR-303註釋進行調查。有很多如何完成這個的例子。

對於彈簧驗證方法的基本步驟是:

  • 創建類充當結合對象,
  • 綁定對象傳遞了這樣的一個實例的視圖中的控制器的字段在使用形式標籤庫
  • 在它處理表單提交的控制器的方法的視圖中,使用註釋@ModelAttribute向表單數據綁定到綁定對象
  • 使用定製檢驗對象(可能@Autowired到控制器)來執行驗證

繼承人一個簡單的例子控制器:

@Controller 
public class PersonController {

@Autowired 
private PersonValidator personValidator; 

@RequestMapping(value="person/form", method = RequestMethod.GET) 
public ModelAndView form() { 
    // Instance of binding object 
    Person person = new Person(); 

    // Create ModelAndView which displays personForm view 
    ModelAndView mav = new ModelAndView("person/form"); 
    // Put our binding object in the model 
    mav.getModel().put("person", person); 

    return mav; 
} 

@RequestMapping(value="person/form", method = RequestMethod.POST) 
public String save(@ModelAttribute Person person, BindingResult errors, Model model) { 
    // Call our custom validator and put errors into BindingResult 
    personValidator.validate(person, errors); 

    // If we have validation errors 
    if (errors.hasErrors()) { 
     // Show form with errors 
     return "person/form"; 
    } 

    // Otherwise show some success page 
    return "person/success"; 
} 

}

+0

我想的東西是困惑我是這裏的 「@ModelAttribute人的人」 是來自(哪裏?我使用velocity,所以不能使用JSP taglib(如果這樣做的話)。我應該只是使用@RequestParam(「firstname」)... @RequestParam(「lastname」)...這樣並在我的控制器中構建一個Person對象?然後按照所示的其餘步驟? BindingResult錯誤的同樣的問題 – 2010-11-05 10:01:52

+0

嗯,我沒有意識到@ModelAttribute函數的具體細節,我現在無法檢查,但我猜想,由於表單JSP taglib輸出純HTML,所以有一些東西在Spring框架內負責實際的綁定。 Spring文檔建議有一些Velocity綁定宏可用,請參閱http://static.springsource.org/spring/docs/3.0.0.M4/spring-framework-reference/html/ch16s04.html – 2010-11-05 10:12:54