我想实现这样的事情:
@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为我的问题提供最佳解决方案?
提前致谢。
添加了:
好的,我想我会记下问题点:
答案 0 :(得分:1)
除了skaffman的回答:您可以使用BindingResult
将BindingResult.MODEL_KEY_PREFIX
与手动添加的模型属性相关联。
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
(如果您不添加某些内容)在那种情况下,那种空洞的晋升模式。)
答案 1 :(得分:0)
promotion = Promotions.get(promotionId);
以上是您的代码行。推广(S)获得(promotionId); //排除我放入()的“s”... 在一个案例中,这应该会帮助你。
另一件可以帮助你的事情是你做@ModelAttribute(“bindingVariable”)。您应该在那里放置一个与您的促销活动绑定的
如果你有一个CHECK块....你应该有一个视图去IF它失败(应该如何处理)......如果它成功。就我所见,你对此没有处理。