通过重定向到Action保留所有请求参数

在更新页面中的记录后,我需要使用更新的消息(成功/失败)填充记录。 这两个动作来自同一页面。 我已将代码添加为,在完成Update操作后,将结果类型添加为Chain,并显示成功消息。 但是在更新操作完成后立即点击搜索(第一次)时它不会消失。 帮助我在点击搜索操作时清除消息。

由于上述问题,我在结果类型中使用了重定向选项。 但我可以在重定向的操作中获取请求参数。 除了硬编码之外,还有什么办法可以将所有请求参数都放在重定向的动作中吗?

在此处输入图像描述

   STORE      RETRIEVE      hierUpdateMDA true  hierarchyUpdate{1} hierarchyUpdate{1}  

有没有办法动态地将参数发送到下一个动作而无需在struts.xml中进行硬编码?

你不能用redirectAction来做,其中参数名称和值可以是动态的,但参数的数量必须是硬编码的,比如

  hierUpdateMDA ${paramValue1} ${paramValue2} ${paramValue3} 

但您可以使用redirect结果 (通常用于重定向到非操作URL)来执行此操作。

基本上,您需要在Struts配置中仅指定命名空间和操作名称(它们也可以是动态的,TBH),以及表示QueryString的动态参数。

然后在第一个Action(或在BaseAction中),你需要一个方法来获取参数映射,循环遍历每个参数(及其每个值),URLEncode它们并返回挂载的QueryString。 而已。

这将适用于表单数据(POST),查询参数(通常为GET)或两者(POST与表单数据 QueryString),并且它的URL安全。

Struts配置

    /cool/target.action${queryParameters}    /cool/requestGrabber.jsp   

org.foo.bar.cool。 RequestGrabberAction.java (Action类)

 package org.foo.bar.cool; import javax.servlet.http.HttpServletRequest; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Enumeration; import org.apache.struts2.interceptor.ServletRequestAware; import com.opensymphony.xwork2.ActionSupport; @SuppressWarnings("serial") public class RequestGrabberAction extends ActionSupport implements ServletRequestAware { private HttpServletRequest request; public void setServletRequest(HttpServletRequest request){ this.request = request; } public String source(){ System.out.println("Source Action executed"); return SUCCESS; } public String target(){ System.out.println("Target Action executed"); return SUCCESS; } public String getQueryParameters() throws UnsupportedEncodingException { String queryString = ""; // Get parameters, both POST and GET data Enumeration parameterNames = request.getParameterNames(); // Loop through names while (parameterNames.hasMoreElements()) { String paramName = parameterNames.nextElement(); // Loop through each value for a single parameter name for (String paramValue : request.getParameterValues(paramName)) { // Add the URLEncoded pair queryString += URLEncoder.encode(paramName, "UTF-8") + "=" + URLEncoder.encode(paramValue,"UTF-8") + "&"; } } // If not empty, prepend "?" and remove last "&" if (queryString.length()>0){ queryString = "?" + (queryString.substring(0,queryString.length()-1)); } return queryString; } } 

/ cool / requestGrabber.jsp

 <%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags"%>    Request Grabber   QueryString =         

请享用