[英]Spring - SessionAttribute problem
我想实现这样的事情:
@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为我的问题提供最佳解决方案?
提前致谢。
添加:
好吧,我想我会写下问题点:
除了skaffman的答案:您可以使用BindingResult.MODEL_KEY_PREFIX
将BindingResult
与手动添加的模型属性相关联。
Promotion promotion = ....
modelMap.addAttribute("promotion", promotion);
if (!promotion.validate()) {
BindingResult errors = new BeanPropertyBindingResult(promotion, "promotion");
errors.reject("promotion.invalid");
model.put(BindingResult.MODEL_KEY_PREFIX + "promotion", errors);
}
但请注意,您无法将BindingResult
与null
对象关联,因此在未找到促销时不能使用errors.reject
(如果在这种情况下未向模型添加某种空促销)。
promotion = Promotions.get(promotionId);
以上是您的代码行。 推广(S)获得(promotionId); //排除我放入()的“s”...在一个案例中应该帮助你。
可以帮助你的另一件事是当你使用@ModelAttribute(“bindingVariable”)时。 您应该在那里放置一个在您的案例中将绑定促销促销,
如果你有一个CHECK块....你应该有一个视图去IF它失败(应该处理一些如何)......如果它成功。 就我所见,你对此没有处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.