- PR -

JspでのJavaScriptのエラーについて

投稿者投稿内容
ryu
常連さん
会議室デビュー日: 2005/07/05
投稿数: 30
投稿日時: 2005-07-06 18:02
masaさん、マーサさん本当にありがとうございます。

やはり要求と応答は1対1なんですね。かなり勉強になりました。

問題のJSPの部分を必要そうな部分だけ抜粋してみました。長くて申し訳ありません。
ここのダウンロードのボタンを押す前に表示ボタンは正常に動作します。
ダウンロードボタンを押して表示ボタンを押すと『アクセスが拒否されました』という
エラーが表示されます。

<SCRIPT type="text/javascript">
<!--
function chkAddress(){
if(!checkNull(document.frm.add_cd,'住所コード')) {
return false;
}
if(!checkNull(document.frm.address,'住所')) {
return false;
}
document.frm.submit();
return true;
}
var result;
function checkNull(obj,msg){
if(obj.value==''){
alert(msg + 'が入力されていません。 ');
obj.focus();
return false;
}
return true;
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<FORM action='testservlet' method='post' name='frm'>
<TABLE>
<TR>
<TD align='right'><FONT>住所コード</FONT>
<TD><INPUT type='TEXT' name='add_cd' size='5' maxlength='5'></TD>
</TR>
<TR>
<TD align='right'>住所</TD>
<TD><INPUT type='text' name='address' size='1' maxlength='1'></TD>
<TD><input type='button' value='表 示' onclick='chkAddress()'></TD>
<TD><INPUT type='button'name='download'
onclick=location.href='/downloadservlet' value='ダウンロード'></TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
</FORM>


1.IEのセキュリティレベルを確認する。(Scriptが無効になっていないか?)

   IEのセキュリティは中でScriptは有効になっております。

2.test.csvの出力先を確認してみる。
 (パス、ディレクトリ、ファイルの存在及びアクセス属性)

   出力先は、c:\を指定しておりアクセス属性も問題ないと思います。

3.setHeaderのfilenameをパス付で記述してみる。

   パス付きで記述してみたのですが同じ現象です。

以上よろしくお願い致します。
マーサ
ベテラン
会議室デビュー日: 2004/11/26
投稿数: 87
投稿日時: 2005-07-06 19:13
気になる部分があります。

まず、
引用:
<FORM action='testservlet' method='post' name='frm'>



actionをパス指定で記述してみてください。
※動作時にパスが変更されると、そこで動作しようとする為。

次に、
引用:
<TD><INPUT type='button'name='download'
onclick=location.href='/downloadservlet' value='ダウンロード'></TD>



location.hrefをしようしているのですが何故ですか?
何処かのサンプルを参考にしたのでしょうか。。。

表示とダウンロードを別FORMにしてしまうやり方の方がスッキリとしますね。
(JavaScriptでsubmit先を変えても良いですが)
------------------------------------
<FORM action='/testservlet' method='post' name='frm'>
・・・省略・・・
</FORM>

<FORM action='/downloadservlet' method='post' name='frm_dl'>
<INPUT type='button'name='download'
onclick='submit()' value='ダウンロード'>
</FORM>
------------------------------------


引用:
ダウンロードボタンを押して表示ボタンを押すと『アクセスが拒否されました』という
エラーが表示されます。



このときにエラーの詳細が出ていませんか?
IEなら左下のマークで詳細を表示出来たかと。。。(JavaScriptのエラーなんですよね?)

後、ダウンロード後のページのソースを確認してみて下さい。


PS
申し訳ない・・・今更なんですが、環境も教えて貰えますか
masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-07-06 19:41
引用:

未記入さんの書き込み (2005-07-06 18:02) より:

<TD><INPUT type='button'name='download'
onclick=location.href='/downloadservlet' value='ダウンロード'></TD>



location.hrefが怪しい・・・

マーサさんが書いて下さったように以下の形に変更すれば直るよう
な気がします!

------------------------------------
<FORM action='/downloadservlet' method='post' name='frm_dl'>
<INPUT type='button'name='download'
onclick='submit()' value='ダウンロード'>
</FORM>
------------------------------------
ryu
常連さん
会議室デビュー日: 2005/07/05
投稿数: 30
投稿日時: 2005-07-07 10:32
引用:

actionをパス指定で記述してみてください。
※動作時にパスが変更されると、そこで動作しようとする為。


パス指定を記述してみたのですが、同じようにJavaScriptでエラーになってしまいます。

引用:

location.hrefをしようしているのですが何故ですか?
何処かのサンプルを参考にしたのでしょうか。。。


はい。サンプルを参考にしました。location.hrefを使用するとまずいのでしょうか?

引用:

表示とダウンロードを別FORMにしてしまうやり方の方がスッキリとしますね。
(JavaScriptでsubmit先を変えても良いですが)


以下のように修正してみたのですが、同じようなエラーになってしまいます。
<SCRIPT type="text/javascript">
<!--
function chkAddress(){
if(!checkNull(document.frm.add_cd,'住所コード')) {
return false;
}
if(!checkNull(document.frm.address,'住所')) {
return false;
}
document.frm.submit();
return true;
}
var result;
function checkNull(obj,msg){
if(obj.value==''){
alert(msg + 'が入力されていません。 ');
obj.focus();
return false;
}
return true;
}
function submitdl() {
document.frm.action = '/test/downloadservlet';
document.frm.submit();
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<FORM action='/test/testservlet' method='post' name='frm'>
<TABLE>
<TR>
<TD align='right'><FONT>住所コード</FONT>
<TD><INPUT type='TEXT' name='add_cd' size='5' maxlength='5'></TD>
</TR>
<TR>
<TD align='right'>住所</TD>
<TD><INPUT type='text' name='address' size='1' maxlength='1'></TD>
<TD><input type='button' value='表 示' onclick='chkAddress()'></TD>
<TD><INPUT type='button'name='download'
onclick=submitdl() value='ダウンロード'></TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
</FORM>

引用:

このときにエラーの詳細が出ていませんか?
IEなら左下のマークで詳細を表示出来たかと。。。(JavaScriptのエラーなんですよね?)


『アクセスが拒否されました』というのが詳細表示で確認したエラーメッセージです。
更に詳細に書くと
ライン:18
文字:3
エラー:アクセスが拒否されました。
コード:0
URL:http://--------------/test/testservlet

引用:

後、ダウンロード後のページのソースを確認してみて下さい。


ダウンロード後のページのソースを確認する上で気をつけなければならない点はありますか?

引用:

申し訳ない・・・今更なんですが、環境も教えて貰えますか


本当に申し訳ありませんでした。一番最初に環境をお伝えするべきでした。
JAVA:JDK1.3.1
サーバ:Oracle9iAS
開発環境:JDeveloper

以上です。申し訳ありませんがよろしくお願い致します。
マーサ
ベテラン
会議室デビュー日: 2004/11/26
投稿数: 87
投稿日時: 2005-07-07 11:03
[quote]
引用:
はい。サンプルを参考にしました。location.hrefを使用するとまずいのでしょうか?


location.hrefは現在のURLを示しているものです。
そこへURLを代入するとそのページに遷移します。

FORMのactionはmethodに指定した方法で実行された時の動作となります。
サーバー側へ送られる情報と言うのは、<FORM>〜</FORM>間の情報となります。
つまり、情報量が多くなれば多くなるほど、余計なデータを送信してしまう(メモリを使用する、処理が遅くなる)事になります。
※詳しくはHTMLやJavaScriptのドキュメント、他の方のノウハウがネット上に転がっているはずなので、探してみてください。

引用:
『アクセスが拒否されました』というのが詳細表示で確認したエラーメッセージです。
更に詳細に書くと
ライン:18
文字:3
エラー:アクセスが拒否されました。
コード:0
URL:http://--------------/test/testservlet


ここですね、URLが物凄く怪しい物になっていますね。
では、document.frm.action = 'HTTP://xxxxxxx/test/downloadservlet'; と、言う感じにサーブレットを相対でなく絶対パスで指定して見ましょう。
それで解決すると思います。

引用:
ダウンロード後のページのソースを確認する上で気をつけなければならない点はありますか?


ダウンロード前とダウンロード後で相違点が有るか無いかをチェックするくらいですね。
未記入
会議室デビュー日: 2005/04/06
投稿数: 15
投稿日時: 2005-07-07 11:27
target を指定しましょう。
私はフレーム分割されていないものは、内部に非表示の iframe を切り
その iframe を target 指定してダウンロードさせています。
フレーム分割されているものは、_self とならないフレームを指定。
理屈的に理解しているのではないですが
反射させてファイルを出力しているというイメージでやっています。
ryu
常連さん
会議室デビュー日: 2005/07/05
投稿数: 30
投稿日時: 2005-07-07 11:31
引用:

location.hrefは現在のURLを示しているものです。
そこへURLを代入するとそのページに遷移します。


location.hrefについてはもっと勉強してみます。

引用:

ここですね、URLが物凄く怪しい物になっていますね。
では、document.frm.action = 'HTTP://xxxxxxx/test/downloadservlet'; と、言う感じにサーブレットを相対でなく絶対パスで指定して見ましょう。
それで解決すると思います。


絶対パスで指定してみたのですが、同じエラーになってしまいます。。。
一つ気になったのですが、ダウンロードのボタンのsubmitもJavaScriptにしましたよね。
それでダウンロード後にもう一度ダウンロードをすると同じエラーが表示されるように
なりました。
そのときのエラーの詳細を見てみるとURLの部分が
URL:http://--------------/test/testservlet
このURLで表示されています。
URL:http://--------------/test/downloadservlet
となると思ったのですが?
表示の方は、
URL:http://--------------/test/testservlet
が表示されています。

引用:

ダウンロード前とダウンロード後で相違点が有るか無いかをチェックするくらいですね。


確認しましたが、特に違いはありませんでした。

本当に申し訳ありません。。。
ryu
常連さん
会議室デビュー日: 2005/07/05
投稿数: 30
投稿日時: 2005-07-07 15:11
未記入さんありがとうございます。

引用:

target を指定しましょう。
私はフレーム分割されていないものは、内部に非表示の iframe を切り
その iframe を target 指定してダウンロードさせています。
フレーム分割されているものは、_self とならないフレームを指定。
理屈的に理解しているのではないですが
反射させてファイルを出力しているというイメージでやっています。



すみません。僕に理解力がないのかよくわからない部分があります。
まず、JSPをiframeで囲いますよね?そのiframeにtargetを指定して
ダウンロードを行うというのがよくわかりません。
もう少し詳細に教えていただけると助かります。

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