- PR -

strutsのActionクラスからPOST送信。

1
投稿者投稿内容
亜依
会議室デビュー日: 2005/08/03
投稿数: 1
投稿日時: 2005-08-03 15:43
初めて投稿させていただきます。

struts1.2で開発をしております。

http://aaa/test1/ のアクションクラスから、
http://bbb/test2/myjsp.jsp に遷移したいのですが、
test2のjspにパラメータを渡したいと思っています。
その際、POSTで渡してJSPに遷移・・・という方法はあるのでしょうか?

ActionForward#setPathに、http://aaa/test2/first.do?param1=AA&param2=BB
のように、始めはGETでやっていたのですが、
POSTで渡して欲しいとなってしまいまして・・・。

どなたか、ご教授いただけないでしょうか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-08-03 19:16
ないです。

アクションクラスを指定しているフォームのメソッドをPOSTにしましょう。
nak2k
ベテラン
会議室デビュー日: 2003/07/17
投稿数: 86
投稿日時: 2005-08-03 21:23
「渡したいパラメータをhiddenで持ったPOSTメソッドのフォームを持ち、(DHTML上の)onloadイベントでただちにそのフォームをsubmitするようなページ」を最初のアクションが返せばいいと思います。

コード:
<html>
<body onload="document.all.f1.submit()">
  <form id="f1" method="post" action="http://bbb/test2/myjsp.jsp">
    <input type="hidden" name="param1" value="AA">
    <input type="hidden" name="param2" value="BB">
  </form>
</body>
</html>



たぶん、こんな感じ(document.allはIEだけでしたっけ?^^;)
ちょま吉
大ベテラン
会議室デビュー日: 2004/08/04
投稿数: 112
投稿日時: 2005-08-04 00:16
document.allはIEだけのようですね。
下でいいと思います。
コード:
<body onload="document.f1.submit()">

<form name="f1" method="post" action="http://bbb/test2/myjsp.jsp">
<input type="hidden" name="param1" value="AA">
<input type="hidden" name="param2" value="BB">
</form>
</body>
</html>




[ メッセージ編集済み 編集者: ちょま吉 編集日時 2005-08-04 00:17 ]
キルシェ
常連さん
会議室デビュー日: 2004/03/25
投稿数: 26
投稿日時: 2005-08-04 00:19
#strutsは触ったことが無いのではずしてる様な気がしないでもないですが・・・

アクションクラスで HttpServletRequest#setAttribute し、
JPSから request.getAttribute ではダメなのでしょうか?

もっとも、フレームワークという見方からするとマナーの悪いプログラムっぽい
気がしますけど
ちょま吉
大ベテラン
会議室デビュー日: 2004/08/04
投稿数: 112
投稿日時: 2005-08-04 19:13
引用:
http://aaa/test1/ のアクションクラスから、
http://bbb/test2/myjsp.jsp に遷移したいのですが、


のように異なるマシン間ですので、セッションは利用できないのです。

セッションレプリケーションを利用すればできるかも?しれませんが。

[ メッセージ編集済み 編集者: ちょま吉 編集日時 2005-08-04 19:14 ]
キルシェ
常連さん
会議室デビュー日: 2004/03/25
投稿数: 26
投稿日時: 2005-08-05 15:53
あ、サイトが違ってましたね。
見落としていました。

それなら、確かにonloadイベントで自動POSTする位しか思いつきません。
#アクションクラスからURLConnectionを使って、とかもありはしますが・・・


本題から離れてしまいますが、
・どういう目的で他のサイトにPOSTしたいのでしょうか。
・最初からそのサイトにPOST出来ないのでしょうか。
といったところが知りたい気もします(^^;

----
補足です>かつのりさん

URLConnectionを使った場合は、アクションクラスから他のサイトのJSPへの
遷移ではなく、アクションクラスからのHTTP応答になると認識しています。
#他サイトをincludeする感じでとらえています。

もともと、他サイトへのActionForwardであれば、HttpServletResponse#sendRedirectだろうと
推測しましたので、〜myjsp.jspの遷移結果も、実際はアクションクラスのHTTP応答は
301や302で、差し換わる形でmyjsp.jspが表示されているのでは?と思います。
これを無理やりPOSTにするとダミーではありますが、ステータス200の応答が
出来てしまう=ブラウザ履歴として残る、と思っています。
(sendRedirectで遷移履歴がどうなるかは未確認ですが・・・)

なぜPOSTにしたいのかにもよりますが、こういう画面遷移が出来てしまうことを
望んではいないだろうと解釈(まー、亜衣さんというより私が、ですが(^_^;;)しましたので、
別サイトへのリダイレクトではなく、アクションクラスのHTTP応答として表示して
しまえば良い、という「かなり乱暴な」選択肢も考えられるかな、ということで上げました。
#実際は、他者のページを自分の応答として返すので倫理的な問題が・・・
#どちらも自分が運営しているか、契約関係があるか、そういう必要があるでしょうけれど。

なので、URLConnectionを使うと丸く収まるというつもりはありません。

やはり、親発言者の亜衣さんがどういう振る舞いを期待・重視しているか(どこまで
乱暴にやってよいのか)次第だと思いますので、そういうフォローが亜衣さんからあれば、と
思います。
#むろん、乱暴にすればするほど、非一般的で融通の利かない方法になるでしょうけれど(^^;

[ メッセージ編集済み 編集者: キルシェ 編集日時 2005-08-05 23:26 ]
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-08-05 18:21
キルシェさん

URLConnectionを使ってもリクエストの発生は可能ですが、画面遷移ができないです。
(質問者がそれでもいいというのであれば問題なしですが。)
プロキシ代わりのJSPを使用するか、(スクリプトが有効であるのが前提)
元からPOSTで送信すべきでしょう。

亜依さん

アクションクラスに委譲された時点で、すでにブラウザより送信済みです。
ですので、送信方法を切り替えるということはできません。
URLを指定しているのはただのリダイレクトです。
これはGETになるのでどうしようもありませんね。
どうしても、というのであればnak2kさんの案が無難でしょう。
1

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