Struts2重定向到具有未知数量参数的另一个动作

我有一个登录操作,在成功执行后重定向到上一页(我将上一页存储在我的会话中,以便稍后可以获取)。 在Struts2中,我可以找到两种方法来执行此重定向:

 ${previousAction.requestURL}  

在这个例子中,将调用getPreviousAction()。getRequestURL()方法(这是一个自制方法,它不是struts2),这将按预期返回上一页的url,例如:

 somenamespace/index.action 

还有另一种重定向:

   ${previousAction.name} /${previousAction.namespace}   

我想使用这个redirectaction结果类型,因为它更干净。 但是,当查询参数是url的一部分时,我遇到了问题。 例如:

 somenamespace/index.action?name=john&age=50 

我知道我可以在我的struts.xml中添加这些硬编码的params,但问题是我的登录操作应该重定向到以前调用的任何操作,而且我事先不知道先前操作有哪些查询参数。 这与您正确知道要重定向到哪个操作的典型用例不同

我发现一个非常糟糕的解决方案是添加每个param(在struts.xml中我所有动作的所有参数的集合),然后使用选项:

 true 

您可以从ActionMapping保存操作名称,命名空间和参数。

 ActionMapping mapping = ServletActionContext.getActionMapping(); 

您还可以保存查询字符串而不是参数映射。

 String params = request.getQueryString(); 

要动态地向redirectAction结果添加参数,您应该在动态参数中使用OGNL。

 ${previousAction.name +'?'+ parameters} 

假设您有一个parameters的getter,并从保存先前查询字符串,操作名称和命名空间的会话初始化它。