我有一个带有Spring MVC 3.0.4.RELEASE的webapp。
我有以下情况:
1)我通过GET进入搜索网页,路径为:search.html
2)我点击搜索并对路径进行POST:searchResults.hmtl
3)当我点击搜索结果时,我会对searchResults / enterResult.html执行POST
4)假设控制器引发异常......
5)我需要使用之前的搜索返回searchResults.html页面。
我无法使用forward,因为它维护路径searchResults / enterResults.html,所以如果我点击搜索结果,它会构建以下不存在的路径:searchResults / searchResults / enterResults.html
你知道如何解决这个问题吗?
答案 0 :(得分:2)
如果发生错误,为什么不进行redirect:searchResults.html
而不是转发呢?如果要将错误消息发回以显示在该页面中,可以将它们添加为参数,如下所示:redirect:searchResults.html?error_message=yada
。
顺便说一句,如果您在构建搜索结果表单操作时避免使用相对URL,那么首先不应该出现searchResults/searchResults/enterResults.html
问题。看起来您正在enterResults.html
而不是/your-app/searchResults/enterResults.html
进行POST。如果您解决此问题,则无需像上面提到的那样执行重定向。
我在这里想说的是:
......而不是这样做......
<form action="enterResults.html" method="POST">
...
</form>
......做这个......
<form action="${pageContext.request.contextPath}/searchResults/enterResults.html" method="POST">
...
</form>
这样,转发的URL是否保留以前的URL并不重要。您将始终POST到正确的操作。