- PR -

Strutsで新しいウィンドウにPDFを表示させる方法

投稿者投稿内容
AS
会議室デビュー日: 2004/09/15
投稿数: 4
投稿日時: 2004-09-15 16:57
Struts初心者です。どうしてもわからないので投稿します。
PDFをクライアントにダウンロードして別ウィンドウに表示させたいのですが、
空白ウィンドウが立ち上がり、PDFが表示されません。
Tomcatのコンソールやログには何も表示されません。
環境はTomcat4.1.30+Struts1.1です。
もしご存知の方がおられましたら、ご指摘お願いします。


test.JSPのボタンはこんな感じ。
<input type="button" value="てすと" onClick="window.open('<html:rewrite page='/testPrintAction.do'/>')">

struts-config.xmlはこんな感じです。
<action input="/test.jsp" path="/testPrintAction" type="TestPrintAction" validate="false">
</action>

TestPrintActionクラスのexecuteメソッドはこんな感じです。
response.reset();
response.setContentType("application/pdf;");
response.setHeader("Content-Disposition", "inline; filename=" + "test.pdf");
DataOutputStream out = new DataOutputStream(response.getOutputStream());
FileInputStream in = new FileInputStream("C:/test.pdf");
byte [] buffer = new byte[4096];
int readbyte;
while ((readbyte = in.read(buffer)) != -1){
out.write(buffer,0,readbyte);
}
in.close();
out.flush();
out.close();
return null;
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-09-15 17:09
TestPrintActionクラスが実行されているのは確認されたのでしょうか。
以下の部分から生成されるHTMLソースは期待通りになっていますか?

<input type="button" value="てすと" onClick="window.open('<html:rewrite page='/testPrintAction.do'/>')">
AS
会議室デビュー日: 2004/09/15
投稿数: 4
投稿日時: 2004-09-15 17:23
早速の返信ありがとうございます。
Actionクラスの途中にログなどでログをはくと出力されます。
生成されるHTMLは下記のようになっています。
<input type="button" value="てすと" onClick="window.open('/test/testPrintAction.do')">

また、空白ウィンドウのソースを表示すると次のようになっています。
<html><body leftmargin=0 topmargin=0 scroll=no> <embed width=100% height=100% fullscreen=yes src="http://localhost:8080/test/testPrintAction.do"></body></html>
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-09-15 20:47
まず、問題を切り分けましょう。
・新しいウィンドウを表示させず
・JavaScriptを使わずに
そのアクションを呼び出したらどうなりますか?
AS
会議室デビュー日: 2004/09/15
投稿数: 4
投稿日時: 2004-09-16 11:00
下記のようなJSPで自画面に表示させるとうまくいっているようです。
(複数のActionがあるのでfunctionで切り分けています。)
また、別ウィンドウの場合、なぜかTestPrintActionのログが2回出てしまいます。
ここらへんが怪しいのでしょうか?

<html:form action="/anotherAction">
:
<input type="button" value="てすと" onClick="submitForm('testPrintAction')">
:
</html:form>

function submitForm(action){
var form = document.forms[0];
form.action = action + ".do";
form.submit();
return false;
}
タモリのファン
会議室デビュー日: 2004/02/07
投稿数: 7
投稿日時: 2004-09-16 11:26
testPrintAction.doをブラウザのURLに直接打ち込んだら出るのかなー?
出たら、rewriteタグ使ってるところをハードコーディングで指定
してみては?
あいつー
ベテラン
会議室デビュー日: 2004/05/20
投稿数: 89
投稿日時: 2004-09-16 13:26
あいつーです。

AdobeReaderのバージョンによってはGETじゃ表示されずにPOSTだと表示される、
なんてこともあったりしますが。
確か5.xだと表示されなかったような…。
taro
ぬし
会議室デビュー日: 2003/10/20
投稿数: 316
投稿日時: 2004-09-16 13:46
以下のようにPOSTすれば別画面に表示されるのではないでしょうか?
コード:
function submitForm(action){
 var form = document.forms[0];
 form.action = action + ".do";
 form.target= "_new"; // なんでもよいです
 form.submit();
 return false;
}

スキルアップ/キャリアアップ(JOB@IT)