繁体   English   中英

Spring - SessionAttribute问题

[英]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为我的问题提供最佳解决方案?

提前致谢。

添加:

好吧,我想我会写下问题点:

  1. 当会话中没有对象时,它不能与@ModelAttribute绑定,抛出类似“在会话中找不到对象”的错误。 并且在任何地方都没有“可选”参数。
  2. 我不能在参数中使用@ModelAttribute,因为我正在覆盖该促销对象。 正确的方法应该是model.addAttribute(“促销”,促销)。 但我还需要一种方法来提供错误,我认为无法使用model.addAttribute提供它们。

除了skaffman的答案:您可以使用BindingResult.MODEL_KEY_PREFIXBindingResult与手动添加的模型属性相关联。

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);
}

但请注意,您无法将BindingResultnull对象关联,因此在未找到促销时不能使用errors.reject (如果在这种情况下未向模型添加某种空促销)。

promotion = Promotions.get(promotionId);

以上是您的代码行。 推广(S)获得(promotionId); //排除我放入()的“s”...在一个案例中应该帮助你。

可以帮助你的另一件事是当你使用@ModelAttribute(“bindingVariable”)时。 您应该在那里放置一个在您的案例中将绑定促销促销,

如果你有一个CHECK块....你应该有一个视图去IF它失败(应该处理一些如何)......如果它成功。 就我所见,你对此没有处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM