如何从@ActionMapping处理程序方法重定向并避免后续的自动/默认@RenderMapping调用?
为什么我(我想)需要这个
我有@ActionMapping方法"做东西"然后重定向到同一控制器中的@RenderMapping方法 。我想在这两个兄弟方法之间执行重定向,以防止在用户刷新页面时调用@ActionMapping处理程序(以及执行操作)。如果用户这样做,这次只会调用@RenderMapping处理程序。
目前,当我点击指向我的@ActionMapping处理程序的链接时,@ RenderMapping处理程序将被调用两次。一次作为@ActionMapping之后的默认跟进,一次是成功重定向的结果。
答案 0 :(得分:1)
我有一些类似的问题,就是要调用portlet的动作 一旦我之前调用过,刷新页面(无意识) 使用按钮或链接(有意)的行动。
解决方法:
我在view
上放置了一个隐藏字段,并使用javascript(在点击按钮或链接时调用)将当前网址排除在queryString
之外,如下所示:
<input type="hidden" name="redirect" id="redirect" value="" />
function setRedirectURL() {
document.getElementById('redirect').value = window.location.href.split('?')[0];
}
然后在操作方法中检索request
参数,并在成功完成操作时手动重定向到它的值,如下所示:
String redirect = actionRequest.getParameter("redirect");
if (redirect != null && redirect != "") {
actionResponse.sendRedirect(redirect);
}
导致刷新queryString
参数。因此,下次URL变得简单,即使在刷新页面上也只会调用portlet的渲染方法。