0

私は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にマップすることは可能ですか..ありがとう

4

1 に答える 1

0

アクションでファイルが存在するかどうかを確認し、それぞれsuccess&を返し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>

エラー.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" );
    }
  }
});
于 2013-11-07T04:33:25.297 に答える