Я хочу реализовать что-то вроде этого:
@Controller
@SessionAttributes("promotion")
class PromotionController {
@RequestMapping("showPromo")
void showPromotionInfo(
@RequestParam("promId") String promotionId,
@ModelAttribute Promotion promotion, Errors errors
) {
promotion = Promotions.get(promotionId);
if (promotion == null || promotion.validates() == false) {
errors.reject("promotion.invalid");
}
return "prom";
}
}
Код недействителен, не работает и имеет несколько ошибок, но я не знаю, как его написать лучше.
Когда пользователь приходит по URL «showPromo? PromId = 15», контроллер должен проверить, является ли продвижение действительным (устаревшим / несуществующим / и т. Д.).Если он действителен - он должен показать информацию и сохранить продвижение в модели и сеансе.Если это не так - это должно показать некоторую ошибку о том, что продвижение недействительно.
Проблема в том, что мне нужно сохранить продвижение в сеансе (для нескольких запросов), и я не хочу использовать прямое управление сеансом.Это в настоящее время возможно с весны?Или я что-то не так делаю?
Не могли бы вы предоставить оптимальное решение моей проблемы с помощью Spring 3?
Заранее спасибо.
Добавлено:
Хорошо, я думаю, что напишу проблемные моменты:
- Когда в сеансе нет объекта, он не может быть связан с @ModelAttribute, выдавшим ошибку типа «объект не найден в сеансе».И нигде нет «необязательного» параметра.
- У меня не может быть @ModelAttribute в параметрах, так как я перезаписываю этот объект продвижения.Правильным способом должен быть model.addAttribute («раскрутка», раскрутка).Но мне также нужен способ предоставления ошибок, и я не вижу способа предоставить их с помощью model.addAttribute.