我有一个使用Spring MVC 3.0.4.RELEASE的webapp。

我有以下情况:

1)我通过GET输入搜索网页,其路径为:search.html
2)我单击搜索并对路径执行POST:searchResults.hmtl
3)当我单击搜索结果时,我要对searchResults / enterResult.html进行开机自检
4)假设控制器引发异常...
5)我需要返回上一个搜索的searchResults.html页面。

我不能使用正向,因为它保留了路径searchResults / enterResults.html,因此,如果我单击o搜索结果,它将建立以下不存在的路径:searchResults / searchResults / enterResults.html

你知道如何解决这个问题吗?

最佳答案

如果发生错误,为什么不执行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并不重要。您将始终发布正确的操作。

10-04 19:25