在struts 2中的文件下载中不存在文件时无法映射

时间:2013-11-06 07:18:46

标签: struts2

我正在使用struts2开发一个Web应用程序。因为当用户点击链接时,我正在下载一个文件。   当用户点击链接时,我正在检查我的动作类中是否存在所请求的文件是否存在然后它正常工作...   什么它不存在我给出一个动作错误消息..但该页面重定向到我已全局映射的错误页面..在我的控制台中除了这些错误行之外没有异常消息..  Can not find a java.io.InputStream with the name [fileInputStream] in the invocation stack. Check the <param name="inputName"> tag specified for this action.  我可以在我的错误页面中看到该动作消息......我也调试了问题..映射也很完美..

<action name="downloadAction" class="DownloadPDFAction" method="pdfDownload" >
      <result name="success" type="stream">              
          <param name="contentType">application/octet-stream</param>
          <param name="inputName">fileInputStream</param>
          <param name="contentDisposition">attachment;filename="${downloadDoc}".pdf</param>
          <param name="bufferSize">1024</param>
       </result>

当SYSTEM中不存在该文件时,是否可以映射回相同的JSP ..谢谢

1 个答案:

答案 0 :(得分:0)

检查操作中是否存在该文件,并返回success&amp;分别为error。你可以这样做:

<action name="downloadAction" class="DownloadPDFAction" method="pdfDownload" >
      <result name="success" type="stream">              
          <param name="contentType">application/octet-stream</param>
          <param name="inputName">fileInputStream</param>
          <param name="contentDisposition">attachment;filename="${downloadDoc}".pdf</param>
          <param name="bufferSize">1024</param>
       </result>
<result name="error">/error.jsp</result>

<强> error.jsp文件

<s:actionerror/>
<s:actionmessage/>
or your hard-coded message

但是既然如此,你需要回到同一页面,然后我建议使用ajax调用下载操作并在成功时返回200,并在错误上返回204:

<action name="downloadAction" class="DownloadPDFAction" method="pdfDownload" >
          <result name="success" type="stream">              
              <param name="contentType">application/octet-stream</param>
              <param name="inputName">fileInputStream</param>
              <param name="contentDisposition">attachment;filename="${downloadDoc}".pdf</param>
              <param name="bufferSize">1024</param>
           </result>
    <result name="error" type="httpheader">
         <param name="status">204</param>
    </result>

ajax调用可能类似于 - docs

$.ajax({
  statusCode: {
    404: function() {
      alert( "page not found" );
    },
    204: function() {
      alert( "file not found" );
    }
  }
});