代码之家  ›  专栏  ›  技术社区  ›  bezmax

Spring-SessionAttribute问题

  •  3
  • bezmax  · 技术社区  · 16 年前

    @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?还是我做错了什么?

    提前谢谢。

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

    2 回复  |  直到 16 年前
        1
  •  1
  •   axtavt    16 年前

    除了斯卡夫曼的回答:你可以联想 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);
    }
    

    但是请注意,您不能将 具有 null 对象,因此不能使用 errors.reject

        2
  •  0
  •   helpfulGuest    11 年前

    promotion=Promotions.get(promotionId);

    以上是您的代码行。升级。获取(promotionId);//排除我放在()中的“s”。。。 这对你有帮助。

    另一件可以帮助您的事情是当您执行@ModelAttribute(“bindingVariable”)时。你应该在里面放一个,在你的情况下,这会影响到你的晋升,

    如果你有一个检查块。。。。你应该有一个视图去,如果它失败了(应该如何处理)。。。如果成功了。据我所知,这件事你没有办法处理。