我有一个使用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并不重要。您将始终发布正确的操作。