2014-09-03 39 views
0

我需要在更新頁面中的記錄後使用更新的消息填充記錄(成功/失敗)。這兩個操作都來自同一頁面。我已經添加了代碼,在完成更新操作後,將結果類型添加爲鏈並顯示成功消息。但是,當更新操作完成後,我們立即(第一次)單擊搜索時,它不會消失。點擊搜索動作,幫助我清除郵件。通過重定向到操作保留所有請求參數

由於上述問題,我在結果類型中使用重定向選項。但我可以在重定向操作中獲取請求參數。有什麼辦法可以讓所有的請求參數在重定向的操作而不是硬編碼嗎?

enter image description here

<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中硬編碼?

回答

2

你不能用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)。

基本上,您只需要在Struts配置中指定命名空間和動作名稱(它們也可以是動態的,TBH),並且需要一個表示QueryString的動態參數。

然後在第一個Action(或BaseAction)中,您需要一個獲取參數映射的方法,遍歷每個參數(及其每個值),URLEncode它們並返回裝入的QueryString。而已。

這將與表單數據(POST),查詢參數(通常爲GET)或兩者兼而有之(POST與表單數據 QueryString)一起使用,並且它是URL安全的。

的Struts配置

<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(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<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; 
    } 

} 

/冷/ 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> 

享受

相關問題