【问题标题】:Basic view resolution in Spring MVCSpring MVC 中的基本视图分辨率
【发布时间】:2014-07-05 06:53:45
【问题描述】:

我只是检查 Spring MVC 框架,所以我是新手,请原谅基本问题。但我正试图弄清楚视图解析器是如何工作的。

我创建了一个基本的控制器方法来添加这样的用户:

 @RequestMapping(value = "/add", method = RequestMethod.POST)
    public String addUser(@ModelAttribute("user") User user, BindingResult result) {
        logger.entry(user, result);
        userRepository.save(user);

        String returnString="redirect:members/confirmation";
        logger.exit(returnString);
        return returnString;
    }

我希望它重定向到 WEB-INF/pages 文件夹下的 members/confirmation.jsp 页面。这只是一个简单的 JSP,上面写着“感谢注册”。重定向是这样的,它不允许表单重复发布。 (这只是一个基本的测试应用)

我在mvc-dispatcher-servlet.xml配置文件中配置了internalviewresolver:

 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
        <property name="order" value="0"/>
    </bean>

但它并没有解决确认视图,而只是 404。

我在这里错过了什么?

谢谢!

丰富

【问题讨论】:

  • 另外,如果我取出重定向前缀,它工作正常。
  • 您承认重定向和转发。重定向意味着向浏览器发送响应,要求它将请求发送回另一个位置。你想要的是一个前锋。不要使用重定向:前缀。
  • redirect 是阻止重复表单提交问题的推荐方法,对吗? stackoverflow.com/questions/2324931/…
  • POST-REDIRECT-GET 模式确实是一个好主意。但是您必须重定向到可从外部访问的资源的 URL,而不是视图。 redirect: 前缀之后的路径必须是您的控制器方法之一的路径,可以使用 GET 请求访问:一旦您创建了一个用户,您就可以重定向到允许列出所有用户的 URL,例如,或者允许查看创建的用户详细信息的 URL。
  • 好酷,有没有办法通过约定巧妙地解析到 jsp 的路径而不是编写控制器方法?因此,如果我在 GET 上请求“/users/confirmation”,它将自动解析为“/users/confirmation.jsp”。 (我一直在使用 Rails,它非常擅长这些类型的约定)

标签: spring spring-mvc


【解决方案1】:

返回"redirect:members/confirmation" 将客户端重定向到members/confirmation(到这个相对URL)。您的应用程序目前不响应对 members/confirmation 的 HTTP 请求。使用您的目标 JSP 页面作为视图为此 URI 创建一个控制器:

@RequestMapping(value = "/members/confirmation", method = RequestMethod.GET)
public String confirmation() {

     return "members/confirmation";
}

这是唯一正确的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    相关资源
    最近更新 更多