Spring - adding BindingResult to newly created model attribute

一世执手 提交于 2019-11-29 11:23:42

问题


My task is - to create a model attribute by given request parameters, to validate it (in same method) and to give it whole to the View.

I was given this example code:

@Controller
class PromotionController {

    @RequestMapping("promo")
    public String showPromotion(@RequestParam String someRequestParam, Model model) {
        //Create the model attribute by request parameters
        Promotion promotion = Promotions.get(someRequestParam); 

        //Add the attribute to the model
        model.addAttribute("promotion", promotion); 

        if (!promotion.validate()) {
            BindingResult errors = new BeanPropertyBindingResult(promotion, "promotion");
            errors.reject("promotion.invalid");
            //TODO: This is the part I don't like
            model.put(BindingResult.MODEL_KEY_PREFIX + "promotion", errors);
        }
        return 
    }
}

This thing sure works, but that part with creating key with MODEL_KEY_PREFIX and attribute name looks very hackish and not a Spring style to me. Is there a way to make the same thing prettier?


回答1:


Skaffman answered the question but disappeared, so I will answer it for him.

The binding validation thing is there to bind and validate parameters, not arbitrary business objects.

That means, that if I need to do some custom validation of some general data that was not submitted by the user - I need to add some custom variable to hold that status and not use BindingResult.

This answers all the questions I had with BindingResult, as I thought it had to be used as a container for any kind of errors.

Again, thanks @Skaffman.



来源:https://stackoverflow.com/questions/3052752/spring-adding-bindingresult-to-newly-created-model-attribute

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!