こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

strutsで2次元配列をやりとりする方法。

こんにちは。質問です!

現在、STRUTS+Javaを使ってプログラミングしているのですが、
jspにて<logic:iterate>でループさせ
2次元配列をhidden要素に持たせるまでにはいたったのですが、
その際に、
<html:hidden name="aaa" property="str[0]" indexed="true" />
<html:hidden name="aaa" property="str[1]" indexed="true" />
以後続く・・・

で表示すると、HTML表示で、
<INPUT type="hidden" name="aaa[0].str[0]" value="あああ"/>
<INPUT type="hidden" name="aaa[0].str[1]" value="いいい"/>
以後続く・・・

となってしまい、サーブレットに送る際に、name属性に配列のindexが
付加されているため、strに値が入ってきません・・・
2次元配列をjspとサーブレットでやりとりする方法を教えてください。
strとaaaの型は共にjava.util.Listです。

ご回答、よろしくお願い致しますm(_ _)m

投稿日時 - 2007-07-26 14:51:03

QNo.3201189

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

追伸:
コレクション型のコレクション型にすると、strにもgetterが付くので、
2次元配列とは違って、内側のiteraterでインデックスを取ることができます。

結局、jspからのリターン値ということは、あなたが名前をつけているだけのはずなので、
<logic:iterate id="aaa" name="result" property="aaa">
<logic:iterate id="str" name="aaa" property="str" indexId="idx">
とでもして、内側のstrのループの方にindexIdをつけて
<INPUT type="hidden" name="str[<bean:write name="idx" />]" value="あああ"/>
bean:writeでカウンタを変数名につけて、名前を「自分で作れば」いいだけじゃないですか?
http://www.techscore.com/tech/ApacheJakarta/Struts/8-2.html

投稿日時 - 2007-07-27 11:19:35

ANo.2

>jspに出力したコレクション変数をサーブレットへ送る方法
jspに出力した・・・というより、JSPで動的に変更されたhtmlからサーブレットへ送るだと思いますが、
このように書くとお分かりと思いますが、クライアントに表示されている時点でhtmlなので、"aaa[].str[]" は単なる変数名になっているわけで、無理だと思います。

普通は私が書いたように、2次元配列じゃなくて、コレクションのコレクションのようにします。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=6496&forum=12&3

投稿日時 - 2007-07-27 11:08:46

ANo.1

二次元配列なら、<iterate>は2重になるのではないのですか?
<logic:iterate id="aaa" name="result" property="aaa">
<logic:iterate id="str" name="aaa" property="str">

外側のidで取得したiteraterが、内側では配列の素になるって事ではないのでしょうか?
私の場合、わかりにくいといやなので、
直接配列にはしないて、コレクション型変数にコレクション型変数を入れる形にしてますが、きっと同じ事だとおもいますよ。

投稿日時 - 2007-07-26 17:19:37

補足

早速のご回答ありがとうございます!

PED02744さんのコードでは2回目の<logic:iterate ~>で、
bean strのプロパティstrに対するゲッターがありません。
というエラーが出ましたが、別の方法で出力は可能でした。

その際、List型変数に入っているList型変数の各インデックスなので、
hiddenコントロール名がaaa[0].str[0]などとなってしまい、

こんな感じです。
<INPUT type="hidden" name="aaa[0].str[0]" value="あああ"/>

サーブレットに送る際は、strとして送りたいのに・・・
すでに名前が変わっているので、strとしては認識されません。

すみませんが、jspに出力したコレクション変数をサーブレットへ
送る方法をご存知でしたら、教えていただけませんでしょうか?

ちなみに
       str0   str1   str2
------------------------------------------
1レコード目 あああ  いいい  ううう
2レコード目 えええ  おおお  かかか
3レコード目 ききき  くくく  けけけ

これを画面に表示後、サーブレットに戻す処理です。

よろしくお願い致します。

投稿日時 - 2007-07-26 19:16:38

あなたにオススメの質問