- PR -

TOMCAT+servlet出力に関する質問です。

投稿者投稿内容
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2002-05-09 09:17

すみません。私の書き込みを再度見なおすと、確かにちょっと誤解を招くような記述になっていました。

私が聞きたかったのはそういうことではなくて、target 属性に JSP が使えないということに関してです。(この指定を HTML 上で行うというのは了解しています。)

JSP も所詮 サーブレットコンテナが hogehoge.jsp といったURLに JSPから自動的に変換されたサーブレットにマッピングしているだけだと思うので、なぜ JSP だけ駄目なんだろうという疑問です。
Paul
ベテラン
会議室デビュー日: 2002/04/30
投稿数: 75
お住まい・勤務地: 東京
投稿日時: 2002-05-09 11:35
>target 属性に JSP が使えないということに関してです。
どういう意味でしょうか?

target属性の値には、フレームを識別するための文字列しか
設定できないと思いますが、
>なぜ JSP だけ駄目なんだろうという疑問です。
という表現の意図するところが理解できません。
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2002-05-10 14:22
ちょっと私が誤解している可能性が高いので整理させてください。

もとの質問に対して、YOU@ITさんが以下のように発言されています。
引用:

YOU@ITさんの書き込み (2002-05-06 01:44) より:
しょむさんのおっしゃっているように、
<form action="XXX.jsp" method="post" target="frameName">〜</form>
でOKだと思いますよ。




これに対して、しょむさんが以下のように発言されています。

引用:

しょむさんの書き込み (2002-05-06 03:43) より:
target は html でしか指定できませんから、隠しフレームを作ってそこから再呼び出しするしかありませんね。たぶん。

frameset { A : B : C : H(hidden) }
A : <form action="dispatchservlet" target="H">
で、H に返す servlet さんは <form action="もげもげ" target="目的フレーム"> および body onLoad="document.form[0].submit()"




と書かれていたので、form タグの action の属性には jsp が使えないんだと理解してしまいました。

『target は html でしか指定できません』というのは、そういう意味ではなかったのでしょうか?>しょむさん

なんか、場を荒らしているようですみません。
isseki
大ベテラン
会議室デビュー日: 2001/11/05
投稿数: 107
投稿日時: 2002-05-13 12:05
本質問を最初に出したissekiです。
やってみましたので、皆さんに報告します。
結論からしますと、
1.Serverから折り返すページを表示するFrameはHTML上先に決めておかなければならない。
それ以外の方法は見つかっていません。
2.ACTIONのところ何でも指定可能です。仮令Servlet認識できないファイルであっても
エラーにはならないしWEB-serverからDownloadのメッセージを折り返します。
勿論、JSPはServletと同様に実行されます。

しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-05-13 16:39
ふぅ。もちと親切にかいときましょか。

target 属性は、Aタグ、FORMタグなどに使われ、
href 属性や action 属性によって指定される URL へのリクエストを表示する
対象ウィンドウやフレームの名前を指定します。
ウィンドウ名、フレーム名は、ブラウザが判断します。

target 属性が省略されると、[Name] = self すなわちそのタグのあるフレーム or ウィンドウが指定されたと見なされます。

よって、<a href="[URL]" target="[Name]">や<form action="[URL]" target="[Name]">は
そのタグをブラウザが読み込んだ瞬間に target が固定されます。

サーバ側へのリクエストの結果に応じて target を変えたい場合、
<form action="[表示するためのURL]" target="[Name]"> なるタグをブラウザに認識させ、
そのフォームを自動で送信するようなページをつくらねばなりません。

つまり、あるリクエストによって、そのようなページを生成させる必要があります。
そんなページはきっとユーザには見せたくないでしょうから、隠しフレームに
表示させることにします。

つまり、以下のようにします。

1. フレーム「A」に <a href="[ターゲット選択URL]" target="H"> とする。

2. [ターゲット選択URL](JSPでもCGIでもHTMLでもいい)のレスポンスとして、
<form action="[表示させたいURL]" target="[対象フレーム名]"></form>
なるタグを含むページをつくり、
そのページは「表示された瞬間に該当 form を submit」するようにしておく。

3. フレーム「H」は、隠しフレームにしておく

フレーム「A」の該当リンクが押されると、[ターゲット選択URL]へリクエストが
送信され、結果、<form action ... > なるページが隠しフレーム「H」に表示され、
表示された瞬間に <form action ...> が submit されるので、
その form に指定された target フレームへ action 内容が表示される。

------
余談

a もしくは form の target 属性は、JavaScript/ECMA Script/JScript および DOM を使えば
動的に書き換えられるかもしれません。
ただし、ターゲット名を返すためのリクエストを誰がいつ投げるかが問題になりますし、
そのリクエストの結果をどこに表示するかも問題になります。

まぁ、ブラウザがリクエストを投げた瞬間に target はもう決まっている、っていうことですわ。

# しかし…画面に表示されるリンクやボタンが固定なのに
# その結果が違うフレームに出る可能性のある UI って…なんだかなぁ…

----
さらに余談

ちょっと気になって HTTP1.1 の spec を漁ってみましたが、
Request Header にも Response Header にも「ターゲット」に関する情報をどうにかするための情報はありません。
target およびフレーム名/ウィンドウ名は完全にブラウザ側の管理下ですね。
やっぱりサーバ側は HTML を使ってブラウザを制御するしかないです。

[ メッセージ編集済み 編集者: しょむ 編集日時 2002-05-13 17:04 ]
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2002-05-17 10:48
返事が遅くなってしまいました。

やはり私の早とちりでしたね。

サーバ側でクライアントからの要求に応じて、表示する target を指定できないということですね。

納得です。ありがとうございました。
isseki
大ベテラン
会議室デビュー日: 2001/11/05
投稿数: 107
投稿日時: 2002-05-17 11:42
しょむ様Wrote:
>ちょっと気になって HTTP1.1 の spec を漁ってみましたが、
>Request Header にも Response Header にも「ターゲット」に関する情報をどうにかする
>ための情報はありません。

この仕事をやって見たかったのですが方法が分からなくて怠慢でした。

ほんとうに納得できます。
isseki
大ベテラン
会議室デビュー日: 2001/11/05
投稿数: 107
投稿日時: 2002-05-17 11:43
しょむ様Wrote:
>ちょっと気になって HTTP1.1 の spec を漁ってみましたが、
>Request Header にも Response Header にも「ターゲット」に関する情報をどうにかする
>ための情報はありません。

この仕事をやって見たかったのですが方法が分からなくて怠慢でした。

ほんとうに納得できます。

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