从Spring Web MVC控制器返回带有查询参数的视图字符串?

时间:2015-11-13 19:50:15

标签: spring-mvc

这是我喜欢的效果,但我无法弄清楚语法:

@RequestMapping(method = RequestMethod.GET, params = { "param1", "param2" }, produces = "text/html")
public String createForm(Model uiModel, @RequestParam("param1") String param1, @RequestParam("param2") String param2, HttpServletRequest request, HttpServletResponse response) throws IOException {
  populateEditForm(uiModel, new Object());
  return "fubar/update?param1=" + param1+ "&param2=" + param2;

}

错误是

javax.servlet.ServletException: Could not resolve view with name 'fubar/update?param1=...

有没有办法将查询参数附加到返回字符串?

谢谢!

3 个答案:

答案 0 :(得分:1)

查看您在问题下方添加的评论,看起来您正试图转发到视图(例如:JSP)。所以,是的,那里没有重定向。您可以在HTML FORM上设置这些参数(就像您一样)。但您也可以通过将这些值添加到模型中来设置这些值。因此,在这种情况下,您绝对应该使用第一个ModelAndView构造函数参数来指定要转发到的视图[没有"重定向" part]并使用第二个参数传递模型参数。

在将旧的Struts应用程序转换为Spring应用程序时,会发生很多事情。在struts中,它看起来像"您可以通过有趣的方式添加请求/ URL参数。实际上,一旦收到inboud HTTP请求,向URL参数添加内容就没有意义。您只是想为您的"请求处理"添加新值。逻辑(向MODEL添加参数)。如果您确实需要向URL添加参数,则仅当您要创建新请求(主要是重定向到另一个页面)时才会这样做。在这种情况下,另一个答案是在正确的路径上,但您想要将URL参数添加到"重定向:" String(在ModelAndView构造函数的FIRST参数中):

return new ModelAndView("redirect:fubar/update?param1=" + param1+ "&param2=" + param2);

当然,如果你想重定向(HTTP 302)到另一个页面,那就是这样。

答案 1 :(得分:0)

我使用了两个控制器来渲染在地址栏中具有查询参数的视图:

@GetMapping("/requesting-path")
public String backToApp(Model model) {
    return "redirect:/shown-in-addressbar-path?paramKey=paramValue";
}

@GetMapping("/shown-in-addressbar-path")
public String backToApp(Model model) {
    return "/view-id";
}

答案 2 :(得分:0)

我是这样制作的:

 ModelAndView modelAndView = new ModelAndView("redirect:/shown-in-addressbar-path?paramKey=paramValue");
 return modelAndView.getViewName();