2017-03-01 41 views
1

我想了解@InitBinder。 我試圖用多個InitBinder超過一個驗證@ InitBinder的值元素的用途是什麼?

@InitBinder("Validator1") 
protected void initBinder1(WebDataBinder binder) { 
    binder.setValidator(userFormValidator); 
} 

@InitBinder("Validator2") 
protected void initBinder2(WebDataBinder binder) { 
    binder.setValidator(costcenterFormValidator); 
} 

它不爲我工作,因爲該模型同時嵌套在一個包裝類,我會進行驗證做同樣的

所以@InitBinder的值是什麼時候是個好主意?

回答

2

根據javadoc,@InitBinder中的值是此init-binder方法應用於的命令/表單屬性和/或請求參數的名稱。默認是應用於所有的命令/表單屬性和所有由註釋處理程序類處理的請求參數。在這裏指定模型屬性名稱或請求參數名稱將init-binder方法限制爲那些特定的屬性/參數,其中不同的init-binder方法通常應用於不同的屬性或參數組。

就你而言,你需要將@InitBinder註解的值設置爲你希望它驗證的模型屬性的名稱而不是驗證器的某個名稱。對於userFormValidator,如果你的模型屬性名是用戶,則initbinder應該是:

@InitBinder("user") 
protected void initBinder1(WebDataBinder binder) { 
    binder.setValidator(userFormValidator); 
} 

如果costcenterFormValidator是用於驗證模型屬性命名costcenter那麼initbinder應該是:

@InitBinder("costcenter") 
protected void initBinder2(WebDataBinder binder) { 
    binder.setValidator(costcenterFormValidator); 
} 
0
// For multiple validations use annotations in the initBinder and give proper name of the ModelAttribute in the initBinder. 

@Controller 
public class Controller { 
private static final Logger logger = LoggerFactory.getLogger(Controller.class); 

@InitBinder("ModelattributeName1") 
private void initBinder(WebDataBinder binder) { 
    binder.setValidator(validator); 

} 

@Autowired 
MessageSource messageSource; 

@Autowired 
@Qualifier("FormValidatorID1") 
private Validator validator1; 


@InitBinder("ModelattributeName2") 
private void initBinder1(WebDataBinder binder) { 
    binder.setValidator(validator2); 
} 

@Autowired 
@Qualifier("FormValidatorID2") 
private Validator validator2; 


@RequestMapping(value = "/submit_form1", method = RequestMethod.POST) 
public String handleGetSubmission1(@Validated @ModelAttribute("ModelattributeName1") GetFormModel1 getFormModel1, 
     BindingResult result, Model model) { 

    model.addAttribute("getFormModel1", getFormModel1); 
    if (result.hasErrors()) { 
     return "get_Form1"; 
    } 

    return "get_Complete1"; 
} 


@RequestMapping(value = "/submit_form2", method = RequestMethod.POST) 
public String handleGetJavaAppletSubmission(@Validated @ModelAttribute("ModelattributeName2") GetFormModel2 getFormModel2, 
     BindingResult result, Model model) { 

    System.out.println(result); 
    model.addAttribute("getFormModel2", getFormModel2); 

    if (result.hasErrors()) { 
     return "get_Form2"; 
    } 

    return "get_Complete2"; 
} 
} 
相關問題