Spring - добавление BindingResult во вновь созданный атрибут модели - PullRequest
17 голосов
/ 16 июня 2010

Моя задача - создать атрибут модели по заданным параметрам запроса, проверить его (в том же методе) и передать его целиком в View.

Мне был дан пример кода:

@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 Ответ

3 голосов
/ 17 июня 2010

Скаффман ответил на вопрос, но исчез, поэтому я отвечу за него.

Функция проверки привязки предназначена для привязки и проверки параметров, а не произвольных бизнес-объектов.

Это означает, что если мне нужно выполнить какую-то пользовательскую проверку некоторых общих данных, которые не были отправлены пользователем - мне нужно добавить некоторую настраиваемую переменную для хранения этого состояния и не использовать BindingResult.

Это отвечает на все вопросы, которые у меня были с BindingResult, так как я думал, что его нужно использовать в качестве контейнера для любых ошибок.

Опять же, спасибо @ Скаффман.

...