- 締切済み
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
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- PED02744
- ベストアンサー率40% (157/390)
追伸: コレクション型のコレクション型にすると、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
- PED02744
- ベストアンサー率40% (157/390)
>jspに出力したコレクション変数をサーブレットへ送る方法 jspに出力した・・・というより、JSPで動的に変更されたhtmlからサーブレットへ送るだと思いますが、 このように書くとお分かりと思いますが、クライアントに表示されている時点でhtmlなので、"aaa[].str[]" は単なる変数名になっているわけで、無理だと思います。 普通は私が書いたように、2次元配列じゃなくて、コレクションのコレクションのようにします。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=6496&forum=12&3
- PED02744
- ベストアンサー率40% (157/390)
二次元配列なら、<iterate>は2重になるのではないのですか? <logic:iterate id="aaa" name="result" property="aaa"> <logic:iterate id="str" name="aaa" property="str"> 外側のidで取得したiteraterが、内側では配列の素になるって事ではないのでしょうか? 私の場合、わかりにくいといやなので、 直接配列にはしないて、コレクション型変数にコレクション型変数を入れる形にしてますが、きっと同じ事だとおもいますよ。
補足
早速のご回答ありがとうございます! 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レコード目 ききき くくく けけけ これを画面に表示後、サーブレットに戻す処理です。 よろしくお願い致します。