- 締切済み
[JSP]1Servletから複数フレームにパラメータ渡し
HTMLの<frame>タグでaaa.jspとbbb.jspを同時に表示させています。 aaa.jspからのフォームの値をHOGEというServletで受取り、 処理したものをaaa.jsp・bbb.jsp共に反映(更新)させるにはどうすれば良いでしょうか? 現状、forwardを2回書いているのですが、下記の様に怒られてしまいます。 (エラー/java.lang.IllegalStateException: レスポンスをコミットした後でフォワードできません ) ============aaa.jspのフォーム=================================== <form name="a1" method="post" action="/HOGE"> <input type="submit" name="GO" value="go"> </form> ================================================================ ============HOGE (サーブレット)================================ public class HOGE extends HttpServlet { public void doPost (HttpServletRequest request, HttpServletResponse response){ //jspに渡すパラメータをセット request.setAttribute("pram1", "judy"); request.setAttribute("pram2", "mary"); //forward準備 ServletContext sc = getServletContext(); RequestDispatcher aaa = sc.getRequestDispatcher("/jsp/aaa.jsp"); ServletContext sa = getServletContext(); RequestDispatcher bbb = sa.getRequestDispatcher("/jsp/bbb.jsp"); try { aaa.forward(request, response); bbb.forward(request, response); //ここでエラー } catch (ServletException e) { } catch (IOException e) { } } } ============================================================== どなたかご存知の方いらっしゃいましたら御教授宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- annyG
- ベストアンサー率25% (10/39)
補足です。 targetの指定に気をつけてくださいね。そうしないとフレームが入れ子になってしまいますので。 サーブレットを呼び出すリンクに、target="_top"を指定してください。 postの場合はこれを回避するのはちょっと面倒くさいです。というか、私は実際にやった経験はありません。すみません。
- annyG
- ベストアンサー率25% (10/39)
簡単ですよー。 そういうときはフレームセットをjspにしてそちらにforwardします。 フレームセットでパラメタを受け取ったら、それをそれぞれのページに渡します。 例: <frameset> <frame src="sideBar.jsp?<%=パラメタ1%>" name="leftFrame" > <frame src="mainPage.jsp?<%パラメタ2%>" name="mainFrame"> </frameset>
フレーム分けしているとなると、aaa.jspのフォームを送信しても、bbb.jspは更新されないと思います。同時に複数のページを表示するのがフレームですから。そもそも「片方を操作してももう片方には何も影響がない」のがフレームの利点ですから。 どうして、こうした用途でフレームを使う必要があるのでしょうか。特に必要性がないのであれば、せっかくJSPを使っているのですから、2つのページをインクルードして1ページとして表示させるのが一般的だと思うのですが。それならば変数を埋め込むなりしていくらでも表示に手を入れられますし。フレームを使ったやり方を考え直すのが、最終的には一番よいように思います。 もし、どうしてもフレームを使わなければならない理由があるようでしたら、それについて補足していただけますか。
補足
violiniさん、ご回答ありがとうございます。 フレームを使う理由なのですが、 現在《ツリービュー、表示ビュー、プロパティビュー》という3フレーム構成で画面を作っており、例えばツリービューのファイルをクリックしたら表示ビューへファイルの中身を表示させ、プロパティビューにはファイルの属性情報を表示させるような作りを想定しています。 尚且つ、eclipseの画面のように表示ビューをもっと大きくしたい場合にマウスで掴んでビューを広げられるような動きが求められます。 以上の理由でフレームを使っているのですが、今回の値の連携で困ってしまいました。 ちなみにJavaScriptを使ってなら実現出来たのですが、後々デバッグが辛すぎるので、出来るならJava側で制御したいと思っています。