2015-02-11 47 views
-1

當請求花費太多時間來編寫html文件時,我想在頁面上放置處理欄。所以我在Strust2中使用了execAndWait攔截器,但頁面無法在wait.jsp上重定向。不重定向在Struts 2的execAndWait intercepter中的wait.jsp頁面

struts.xml中

<action name="htmlUtility"   
     class="com.support.action.ActivityAction"        method="htmlUtility"> 
     <interceptor-ref name="execAndWait"> 
      <param name="delay">1000</param> 
      <param name="delaySleepInterval">500</param> 
     </interceptor-ref> 
    <result name="wait">/pages/reportingview/ftl/wait.jsp</result> 
      <result name="success" type="stream"> 
     <param name="contentType">application/octet-stream</param> 
     <param name="inputName">inputStream</param> 
     <param name="contentDisposition">attachment;filename="${filename}"</param> 
     <param name="bufferSize">1024</param> 
    </result> 
</action> 

Wait.jsp

<%@ taglib prefix="s" uri="/struts-tags" %> 
<html> 
<head> 
<title>wait</title> 
<meta http-equiv="refresh" content="0.5;url='<s:url includeParams="all"  />'"> 
</head> 
<body> 
<p>your request is processing...</p> 
<img src="ajax-loader.gif"/> 
</body> 
</html> 

ActivityAction-

private InputStream saveAsHTML() { 

    ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 
    PrintStream printhtml = new PrintStream(buffer); 
    String htmlheader="<html><style type='text/css'>.dataTable " 
        + "{width:100%; font-family:Verdana, Geneva, sans-serif;border-top:1px solid #ccc; border-right:1px solid #ccc;+}" 
        + ".dataTable th {background:#f1f1f1; text-align:left;padding:5px;font-weight:normal; border-bottom:1px solid #ccc;" 
        + " border-left:1px solid #ccc;}.dataTable tr {}.dataTable td { padding:5px;border-bottom:1px solid #ccc;border-left:1px solid #ccc;}.txtCenterAlign " 
        + "{text-align:center !important;}.transparentBg{ background:transparent !important;}</style><head>"; 
    if(activityType.equalsIgnoreCase(SupportWebConstants.ACCESSPOINT_CONSTANT)){ 

     htmlheader+="<title>Access Point Activity Report</title></head><body> <table width='100%' border='0' cellpadding='0' cellspacing='0' class='dataTable'><thead> <tr>" 
       + "<th colspan='9' class='txtCenterAlign'>Access Point Activity Report</th></tr><tr>"; 

     } 
    else 
     { 
      htmlheader+="<title>Credential Holder Activity Report</title></head><body> <table width='100%' border='0' cellpadding='0' cellspacing='0' class='dataTable'><thead> <tr>" 
        + "<th colspan='9' class='txtCenterAlign'>Credential Holder Activity Report</th></tr><tr>"; 

     } 

    for (String columnName : ReportHeaderMapper.getColumnList(activityType)) { 

     htmlheader+= "<th class='transparentBg'><b>"+columnName+"</b></th>"; 

      } 

     htmlheader+="</tr></thead> <tbody>"; 


    String tableData=""; 
    String htmlfooter=" </tbody></body></html>"; 


    activityList = activityDTOList.getActivityDTOs(); 
    ReportHeaderMapper.setData(activityList); 
    for (List<String> activityDTO : ReportHeaderMapper.getAccessPointAllRows(activityType)) { 
     tableData= tableData+"<tr>"; 
      for (String data : activityDTO) { 
       tableData+= "<td>"+data+"</td>"; 
      } 
      tableData=tableData+"</tr>"; 
     } 
    printhtml.println(htmlheader+tableData+htmlfooter); 
    printhtml.close(); 
    LOGGER.info("HTML file created successfully."); 
    LOGGER.info("HTML activityList size" + activityList.size()); 
return new ByteArrayInputStream(buffer.toByteArray()); 
} 

當我生成我得到以下錯誤的請求

HTTP狀態404 - 無行動 com.narendra.stg.Sdg.support.action.ActivityAction和結果錯誤

類型狀態報告

消息沒有找到行動 om.narendra定義的結果定義的結果。 stg.Sdg.support.action.ActivityAction和結果錯誤

description請求的資源不可用。

回答

1

由於某種原因,您的操作正在返回「錯誤」作爲結果類型。

檢查爲什麼它的返回錯誤,可能是它在方法執行期間的失敗,然後它返回成功。

另外補充回報名稱錯誤和重定向到一些頁的error.jsp,那是你的錯誤說什麼

沒有結果的行動 com.narendra.stg.Sdg.support.action.ActivityAction定義結果錯誤

1

執行操作所需的默認攔截器棧。當覆蓋攔截器時,您不包括defaultStack。請嘗試以下操作配置

<action name="htmlUtility"   
    class="com.assaabloy.stg.support.ActivityAction"        method="htmlUtility"> 
    <interceptor-ref name="defaultStack"/> 
    <interceptor-ref name="execAndWait"> 
     <param name="delay">1000</param> 
     <param name="delaySleepInterval">500</param> 
    </interceptor-ref> 
<result name="wait">/pages/reportingview/ftl/wait.jsp</result> 
     <result name="success" type="stream"> 
    <param name="contentType">application/octet-stream</param> 
    <param name="inputName">inputStream</param> 
    <param name="contentDisposition">attachment;filename="${filename}"</param> 
    <param name="bufferSize">1024</param> 
</result> 
</action> 

應該有一個返回error結果,這結果可以全局配置像this答案攔截。