从@ActionMapping重定向没有调用无意义的@RenderMapping

时间:2016-09-13 13:38:17

标签: java liferay

如何从@ActionMapping处理程序方法重定向并避免后续的自动/默认@RenderMapping调用?

为什么我(我想)需要这个

我有@ActionMapping方法"做东西"然后重定向到同一控制器中的@RenderMapping方法 。我想在这两个兄弟方法之间执行重定向,以防止在用户刷新页面时调用@ActionMapping处理程序(以及执行操作)。如果用户这样做,这次只会调用@RenderMapping处理程序。

目前,当我点击指向我的@ActionMapping处理程序的链接时,@ RenderMapping处理程序将被调用两次。一次作为@ActionMapping之后的默认跟进,一次是成功重定向的结果。

1 个答案:

答案 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的渲染方法。