Spring - 将绑定结果添加到新创建的模型属性

2022-09-02 14:06:36

我的任务是 - 通过给定的请求参数创建一个模型属性,验证它(在相同的方法中)并将其全部提供给视图。

我得到了这个示例代码:

@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 
    }
}

这个东西肯定有效,但是创建带有MODEL_KEY_PREFIX和属性名称的密钥的部分看起来非常黑客,对我来说不是Spring风格。有没有办法让同样的东西更漂亮?


答案 1

斯卡夫曼回答了这个问题,但消失了,所以我会为他回答。

绑定验证是为了绑定和验证参数,而不是任意业务对象。

这意味着,如果我需要对一些不是由用户提交的常规数据进行一些自定义验证 , 我需要添加一些自定义变量来保持该状态并且不使用 BindingResult。

这回答了我在BindingResult上遇到的所有问题,因为我认为它必须用作任何类型错误的容器。

再次感谢@Skaffman。


答案 2

推荐