Сохранение всех параметров запроса посредством перенаправления на действие

Мне нужно заполнить записи с обновленным сообщением (успех / неудача) после обновления записей на странице. оба действия с одной страницы. Я добавил код как, После завершения действия Обновить добавил тип результата как Цепочка, и он показывает сообщение об успехе. Но оно не исчезает, когда мы нажимаем на Поиск сразу (в первый раз) после завершения действия обновления. Помогите мне убрать сообщение, нажимая на действие поиска.

Из-за вышеупомянутой проблемы я использовал опцию перенаправления в типе результата. Но я мог бы получить параметры запроса в перенаправленном действии. Есть ли способ получить все параметры запроса в перенаправленном действии, кроме жесткого его кодирования?

введите описание изображения здесь

<interceptor-stack name="storeStack">
    <interceptor-ref name="defaultStack" />
    <interceptor-ref name="store">
        <param name="operationMode">STORE</param>
    </interceptor-ref>
</interceptor-stack>

<interceptor-stack name="retrieveStack">
    <interceptor-ref name="defaultStack" />
    <interceptor-ref name="store">
        <param name="operationMode">RETRIEVE</param>
    </interceptor-ref>
</interceptor-stack>

<action name="hierarchySaveMap" method="updateHierarchyMap"
    class="com.cotyww.bru.web.action.master.HierarchyUpdateAction">
    <interceptor-ref name="storeStack" />
    <result name="success" type="redirectAction">
        <param name="actionName">hierUpdateMDA</param>
        <param name="parse">true</param>
    </result>
    <result name="input" type="tiles">hierarchyUpdate{1}</result>
    <result name="error" type="tiles">hierarchyUpdate{1}</result>
</action>

Есть ли способ отправить параметры для следующего действия динамически без жесткого кодирования в struts.xml?

1 ответ

Вы не можете сделать это с redirectAction где имена и значения параметров могут быть динамическими, но число параметров должно быть жестко запрограммировано, например,

<result name="success" type="redirectAction">
    <param name="actionName">hierUpdateMDA</param>
    <param name="${paramName1}">${paramValue1}</param>
    <param name="${paramName2}">${paramValue2}</param>
    <param name="${paramName3}">${paramValue3}</param>

Но вы можете сделать это с redirect результат (который обычно используется для перенаправления на неактивные URL).

По сути, вам нужно указать только пространство имен и имя действия (и они также могут быть динамическими, TBH) в конфигурации Struts и динамический параметр, представляющий QueryString.

Затем в первом действии (или в BaseAction) вам нужен метод для получения карты параметров, просмотра каждого параметра (и каждого из его значений), кодирования URLEncode и возврата смонтированного QueryString. Вот и все.

Это будет работать с данными формы (POST), параметрами запроса (обычно GET) или обоими (POST с данными формы и QueryString), и это безопасно для URL.

Struts config

<package name="requestGrabber" namespace="cool" extends="struts-default">
    <action name="source" class="org.foo.bar.cool.RequestGrabberAction" 
          method="source">
        <result type="redirect">                
            <param name="location">/cool/target.action${queryParameters}</param>
        </result>
    </action>
    <action name="target" class="org.foo.bar.cool.RequestGrabberAction" 
          method="target">
        <result name="success">/cool/requestGrabber.jsp</result>
    </action>
</package>

org.foo.bar.cool. RequestGrabberAction.java (Классы действий)

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<String> 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"%>

<!doctype html>
<html>
    <head>
        <title>Request Grabber</title>
    </head>
    <body>
        QueryString = <s:property value="queryParameters" />
        <s:form action="source" namespace="/cool">
            <s:textfield name="foo" value="%{#parameters.foo}" />
            <s:textfield name="bar" value="%{#parameters.bar}" />
            <s:submit />
        </s:form>       
    </body>
</html>

наслаждаться

Другие вопросы по тегам