【问题标题】:Unable to access redirectAttributes while redirecting to controller action with Paramerters使用参数重定向到控制器操作时无法访问 redirectAttributes
【发布时间】:2015-12-19 15:49:20
【问题描述】:

在 Spring MVC 中,

当返回值包含redirect: 前缀时,viewResolver 将此识别为需要重定向的特殊指示。视图名称的其余部分将被视为redirect URL。并且客户端将向这个重定向 URL 发送一个新请求。

我们可以编写这样的处理程序方法来处理重定向:

@RequestMapping(value="/foo", method = RequestMethod.POST )
public String foo(HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes)  {
    redirectAttributes.addFlashAttribute("message", "I am message");
    return "redirect:/bar";
}

现在我们可以像这样在bar() 中访问这个redirectAttribute

@RequestMapping(value="/bar", method = RequestMethod.GET )
public String bar(HttpServletRequest request, HttpServletResponse response, Model model)  {
    String error = (String) model.asMap().get("message");
}

通常我们可以在bar()方法中访问redirectAttribute,但是当我在返回语句中指定一个URL作为参数化的url时,如下所示

return "redirect:/bar?x=1&y=2";

我无法访问 redirectAttributes

我在 chrome 中进一步检查了网络,发现虽然在返回语句中使用未参数化的 url jsessionid 在重定向后保持不变,但在使用参数化的 url 时它确实发生了变化。

谁能告诉我为什么会发生这种情况,或者我在哪里出错了?

【问题讨论】:

  • 您为什么不尝试在 bar 方法上调试模型,以便在使用参数化 url 时获取您收到的对象?
  • 它只显示 null..一切都适用于未参数化的 url,但会因参数化的 url 而中断
  • 你能解决这个问题吗?

标签: spring spring-mvc redirect


【解决方案1】:

如果您想在重定向控制器中访问参数xy 的值,您需要从request 获取Parameter

@RequestMapping(value="/bar", method = RequestMethod.GET )
  public String bar(HttpServletRequest request, HttpServletResponse response, Model model)  {
      System.out.println(request.getParameter("y"));
      return null;
  }

【讨论】:

  • 不,我想访问 FlashAttribute 错误的值。问题中明确提到了??
猜你喜欢
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2013-06-20
相关资源
最近更新 更多