- PR -

Struts Submitボタンでパラメータを送信する

1
投稿者投稿内容
Yamamoto
会議室デビュー日: 2007/11/03
投稿数: 10
投稿日時: 2007-11-03 20:23
StrutsでSubmitボタンが押されたときに、
パラメータを送信したいのですが、
どうしてもStrutsタグだけで上手く書くことができません。

やりたいことを具体的に書くと、以下のような感じです。
※コードは簡略化してます。

コード:
<html:form action="/test">
  <html:hidden property="token" value="TestToken"/>

  String[] param = 任意数のパラメータ;

  for (int i = 0; i < param.length; i++) {
    param[i]
    <html:submit property="A"> A </html:submit>
    <html:submit property="B"> B </html:submit>
    <html:submit property="C"> C </html:submit>
  }
</html:form>


上記のようなフォームで以下を送信します。

@hiddenのトークン値
 (何が押されても同じものを送信)
AA,B,Cどれが押されたか
Bparam[i]
 (A,B,Cどれが押されても、i番目のparamを送信)

現在はボタンからJavaScriptを実行して、
そこで、hiddenフィールドにA,B,Cどれが押されたかと、param[i]を格納して、
送信を実行しています。

できればJavaScriptを使わずStrutsタグだけでやりたく、
かつ、A,B,CボタンはEventDispatchActionを使ってメソッドを振り分けたいのですが、
何か上手い方法はありませんでしょうか?

JavaScriptを使わず、奇麗なコードになるなら全く別の方法でも構いません。
よろしくお願いします。
朝日奈 ありす
ベテラン
会議室デビュー日: 2007/10/28
投稿数: 57
お住まい・勤務地: 北の都
投稿日時: 2007-11-04 18:08
一覧形式かなにかかとおもいますが、


<logic:iterator collection="<%= collection %>" id="s">
<html:form action="/HogeAction.do">
<html:submit property="submit" value="A"/>
<html:submit property="submit" value="B"/>
<html:submit property="submit" value="C"/>
</html:form>
</logic:iterator>

とすれば DispatchAction を実行できる形に変化される。
(結果)
<html>
<body>
<form>
<input type="submit" name="submit" value="A"/>
<input type="submit" name="submit" value="B"/>
<input type="submit" name="submit" value="C"/>
</form>
<form>
<input type="submit" name="submit" value="A"/>
<input type="submit" name="submit" value="B"/>
<input type="submit" name="submit" value="C"/>
</form>
<form>
<input type="submit" name="submit" value="A"/>
<input type="submit" name="submit" value="B"/>
<input type="submit" name="submit" value="C"/>
</form>
<form>
<input type="submit" name="submit" value="A"/>
<input type="submit" name="submit" value="B"/>
<input type="submit" name="submit" value="C"/>
</form>
<form>
<input type="submit" name="submit" value="A"/>
<input type="submit" name="submit" value="B"/>
<input type="submit" name="submit" value="C"/>
</form>
<form>
<input type="submit" name="submit" value="A"/>
<input type="submit" name="submit" value="B"/>
<input type="submit" name="submit" value="C"/>
</form>
</body>
</html>
Yamamoto
会議室デビュー日: 2007/11/03
投稿数: 10
投稿日時: 2007-11-05 00:37
レスありがとうございます。

iteratorタグの使い方は知ってます。
見やすいかと思って、ソースではfor文を使ったんですが、
逆に質問の意図が分かりづらくなってしまったかもしれません。

お聞きしたいのは、ループやDispatchのやり方ではなく、
Submitボタンでパラメータを送信する方法です。

ループによりpropertyもvalueも同じAボタンが、
複数できてしまうわけですが、
それらが各自異なるパラメータを送信したいのです。

今のままのやり方ではJavaScriptを使わないと、
どうしようもないような気もするんですが。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-11-05 02:19
iteratorタグのindexId属性を使うんじゃないですかね。
朝日奈 ありす
ベテラン
会議室デビュー日: 2007/10/28
投稿数: 57
お住まい・勤務地: 北の都
投稿日時: 2007-11-05 07:44
うにゃ、サンプルだしたのみてわかるように
1行==1フォーム javascriptを使用しない場合はこうなる。
DispatchAction系とくみあわせることで

1行ごとデータを送信でき、処理も分けることができる。ということ。
Yamamoto
会議室デビュー日: 2007/11/03
投稿数: 10
投稿日時: 2007-11-05 10:32
「うにゃ」は否定でしょうか肯定でしょうか(笑)

itrateのidを使ってやるとすれば、こんな感じですか?
(indexIdを使ってももちろんいいですが)

コード:
<%
	String[] param = パラメータ配列;
%>

<logic:iterate collection="<%=param%>" id="data">
	<html:form action="/test">
		<input type="hidden" name="token" value="TestToken" />
		<input type="hidden" name="param" value=" <bean:write name="data"/> ">
		<html:submit property="A" value="A" />
		<html:submit property="B" value="B" />
		<html:submit property="C" value="C" />
	</html:form>
</logic:iterate>



こうすれば確かにA,B,CボタンをDispatchできて、
i番目のパラメータも送れます。
このForm自体を回す方法は私も考えたんですが、
最初の投稿に書いたようにトークン値を送りたいので、
それをループ毎に何度も書いてしまうことになるのです。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-11-05 11:47
引用:
べるさんの書き込み (2007-11-05 02:19) より:
iteratorタグのindexId属性を使うんじゃないですかね。

あ、何番目のループか、をとりたいのかと思った。

引用:
それをループ毎に何度も書いてしまうことになるのです。

javascript使うよりは、これでいいんじゃないですかね。
複数formで同じ値を送るなら全formに書くのは避けられないですし。

逆にformをひとつにすると、そのままだとparamが全部送られちゃうから
結局javascriptになっちゃいそうですし。
Yamamoto
会議室デビュー日: 2007/11/03
投稿数: 10
投稿日時: 2007-11-06 11:25
>javascript使うよりは、これでいいんじゃないですかね。

色々と書いているうちに、
確かにこれが割と分かりやすくていい気がしてきました。
Strutsタグの限界というのもあるかもしれません。

みなさん、ありがとうございました。
1

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