簡體   English   中英

spring initBinder和webbindinginitializer示例

[英]spring initBinder and webbindinginitializer example

關於這些主題,我在spring2.5上讀了幾本書,但是仍然無法抓住使用@initBinder時的概念。 任何人都可以分享任何參考或解釋在什么情況下我可以在Web應用程序上使用它? propertyEditor如何與它相關?

好吧,我不能把它比書本更好,但是如果你的控制器有任何使用@InitBinder注釋的公共方法,那么這些方法將在每個請求被處理之前被容器調用,傳入正在使用的WebDataBinder框架。

執行此操作的最常見原因是,您希望自定義Spring嘗試將請求參數綁定到模型的方式,例如,如果您的模型具有Spring無法處理的自定義數據類型。 您對WebDataBinder注冊PropertyEditors。 如果您在模型中使用JodaTime庫,並且希望將時間戳字符串綁定到Joda DateTime對象,那么這將是一個簡單的示例。

使用Spring 2.0,您必須從控制器超類中覆蓋受保護的initBinder()方法,但Spring 2.5無需執行此操作,您現在只需使用注釋即可。

除了skaffman提到的另一個原因是在WebDataBinder上設置自定義驗證器。 我通常會做的是使用JSR-303 bean驗證,然后綁定一個驗證器,它提供JSR-303未提供的額外驗證。

在您的控制器內:

@InitBinder
protected void initBinder(WebDataBinder webDataBinder) {
    Validator validator = webDataBinder.getValidator();
    webDataBinder.setValidator(new UserFormValidator(validator));
}

我正在做的是接受bean驗證器,在我的自定義驗證器中調用它,然后調用我的自定義驗證。 像這樣的東西:

public class UserFormValidator implements Validator {

    private Validator validator;

    public AuthUserFormValidator(Validator validator) {
        this.validator = validator;
    }

    @Override
    public boolean supports(Class<?> clazz) {
        return UserForm.class.equals(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {

        // Run the bean validation...

        validator.validate(target, errors);

        // Do your custom validation on userForm here...

        UserForm userForm = (UserForm) target;

        // Validation on userForm...
    }
}

它需要Spring 2.5.1+,請參閱https://jira.springsource.org/browse/SPR-4182

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM