• 締切済み

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

  • Java
  • 回答数3
  • ありがとう数1

みんなの回答

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.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

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.2

>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)
回答No.1

二次元配列なら、<iterate>は2重になるのではないのですか? <logic:iterate id="aaa" name="result" property="aaa"> <logic:iterate id="str" name="aaa" property="str"> 外側のidで取得したiteraterが、内側では配列の素になるって事ではないのでしょうか? 私の場合、わかりにくいといやなので、 直接配列にはしないて、コレクション型変数にコレクション型変数を入れる形にしてますが、きっと同じ事だとおもいますよ。

system0001
質問者

補足

早速のご回答ありがとうございます! 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レコード目 ききき  くくく  けけけ これを画面に表示後、サーブレットに戻す処理です。 よろしくお願い致します。

関連するQ&A

  • StrutsでJSPからListを受け取りたい

    JSPに複数のhidden(動的に数が変化)があり、これらの値をformのlist(配列)に詰めたいです。 尚、nameの値は別の処理でjavascriptを使いvalueを変化させるため連番であれば構わないです。です。 ~~~JSP~~~ <input type="hidden" name="str1" value="a"/> <input type="hidden" name="str2" value="b"/> <input type="hidden" name="str3" value="c"/> ~~~~~~~~ 上のJSPから下記のFORMに詰めたい ~~~form~~~ private List strList; public List getStrList(){ return strList; } ~~~~~~~~ 又、こちらで調べたところ下記のようにすればいけるようですが欲しい値は一つのためBeanを使用しなくても実現可能ではないかと思い、質問させていただきました。 よろしくお願い致します。 ~~~JSP~~~ <input type="hidden" name="testArray[0].str" value="a"/> <input type="hidden" name="testArray[1].str" value="b"/> <input type="hidden" name="testArray[2].str" value="c"/> ~~~~~~~ ~~~FORM~~~ private List list; public TestBean getTestA(int iIndex) { while (this.list.size() <= iIndex) { this.list.add(new TestBean ()); } return ( TestBean ) this.list.get(iIndex); } public Object[] getTestArray() { return list.toArray(); } public static class TestBean { private String str = ""; public String getStr() { return str; } public void setStr(String str) { this.str = str; } }

    • ベストアンサー
    • Java
  • strutsでの2次元配列について

    java側で2次元配列String[][] totalを生成して、Formにセットしています。 それをJSPで表示させるには <bean:write name="Form" property="total[0][0]" /> とすればできると思ったのですが、[Ljava.lang.String;@16b65f3のように 何かのアドレスのようなものが表示されます。 1次元の配列なら問題なく表示できたのですが、 なにかまずいところがあるのでしょうか。 わかる方いらっしゃいましたら、どうかお願いいたします。

    • ベストアンサー
    • Java
  • 【struts】 ActionFormで別のActionFormの配列を定義時

    皆様お疲れ様です。 現在strutsのコーディングをしているのですが躓いている箇所がございましてお力をお借りしたいと思い、質問させていただきます。 ActionForm_Aの中にActionForm_Bの配列型を宣言しています。 //その他変数色々あってその下 private ActionForm_B[] af_b; getter/setterとしては public ActionForm_B[] getActionForm_B() { return af_b; } public void setActionForm_B(final ActionForm_B[] setAfb) { this.af_b = setAfb; } です。jspで表示するのは出来ますが、取得する際に 「javax.servlet.ServletException:BeanUtils.populate」 が表示されてActionForm_Bの配列型が取得出来ません。 indexedもやっていますし、IterateのindexIdも指定しています。 <logic:iterate id ="af_b" name="af_a" property="af_b" scope="request" indexId="index"> <html:hidden name="af_b" property="name1" indexed="true"/> <html:hidden name="af_b" property="name2" indexed="true"/> </logic:iterate> 表示されているhidden部のhtmlは <input type="hidden" name="af_b[0].name1" value="鬼瓦権座武朗"> となっています。 これを表示している画面からsubmitしますと javax.servlet.ServletException: BeanUtils.populate と表示され落ちてしまいます。 これらの情報からなにか気付いた事、ご指摘等がありましたら是非ご意見を頂きたいと思います。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 配列の受け渡し

    こんばんは。 あるページで使用した配列を他のページでも使いたいのですが、 こういう配列を格納した変数の受け渡しって出来るのでしょうか? 普通の変数のデータを受け渡したかったら <input type="hidden" />で直接valueに変数の値を入れれば良いですが、 配列だと自分では以下のように愚直にやる方法しか分かりません。 もっとちゃんと渡せる方法ってあるのでしょうか? <?$a=array(1,2,3,4,5);?> <? for($i=0;$i<count($aaa);$i++){ ?> <input type="hidden" value="<?=$aaa[$i]?>" name="hoge[]"/> <?}?>

    • ベストアンサー
    • PHP
  • ArrayListに多次元配列

    ArrayListに多次元配列の変数を格納したのですが、取り出し方がわからず困っています。 ----------------------------------------------- String[][] str = {{"aaa","bbb","ccc","ddd","eee","fff"}, {"aaa","bbb","ccc","ddd","eee","fff"}, }}; ArrayList array = new ArrayList(); array.add(str[0]); array.add(str[1]); ----------------------------------------------- 上記の場合で、str[0][2];を取得する方法がわかりません。 java初心者なのでおかしな質問かもしれませんが、宜しくお願いします。

    • ベストアンサー
    • Java
  • struts iterateタグ内のデータ取得方法

    DynaActionFormと、iterateタグを用いて、 複数レコードのデータをTEXTフィールドに設定しています(下記参照)。 入力画面(input.jsp)の次に実行されるActionクラスで、 Textフィールドに表示した配列の項目(sckForm[0].sck_no)の値を取得したいのですが、 記述方法がわからず困っています。 どなたかご存知の方がいらっしゃいましたら、教えてください。 (ソース) ■struts-config.xml <form-beans> <form-bean name="sckForm" type="org.apache.struts.action.DynaActionForm"> <form-property name="sck_no" type="java.lang.String" /> <form-property name="sck_nm" type="java.lang.String" /> </form-bean> ■入力画面(input.jsp) <html:form action="/sck_result.do"> <logic:iterate id="sckForm" name="sck.search" scope="application" indexId="index"> <html:text name="sckForm" property="sck_no" indexed="true"/> <html:text name="sckForm" property="sck_nm" indexed="true"/> </logic:iterate> <html:submit property="submit" value="CSV出力" ></html:submit> </html:form> 実際のHTMLは、下記のように変換されています。 <form name="sckForm" method="post" action="/sample/sck/sck_result.do"> <input type="text" name="sckForm[0].sck_no" value="2005-01-002"> <input type="text" name="sckForm[0].sck_nm" value="A"> <input type="text" name="sckForm[1].sck_no" value="2005-01-003"> <input type="text" name="sckForm[1].sck_nm" value="B"> <input type="submit" name="submit" value="CSV出力"> </form>

  • Perl:hiddenタグを使って二次元配列を保持する方法

    Perlで、ショッピングカートのようなもの(厳密には違いますが)を 作成しております。複数画面に渡ってユーザが必要事項を入力する際の データの受け渡し方法で、どうにも詰まってしまいました。 フォームに <input type="hidden" name="hoge" value=(二次元配列)> のような形で二次元配列を埋め込み、配列の値を一連の処理のあいだ中 保持・利用したいのですが、hiddenタグに上手く配列を格納することが できません。 配列を一要素ずつ展開してhiddenに入れれば実現できましたが、要素数が 多くなる場合も考えると、できればその方法は避けたいと思います。 PerlはWebと参考書で独学で勉強しているため、(私が見つけられないだけで) オーソドックスな方法があるのではと思い質問させていただきました。 検索キーワードなどでも結構ですので、何かアドバイスいただければ幸いです。 よろしくお願い致します。

  • JavaBeansの配列の値取得方法について

    いつもお世話になっております。 JavaBeansで値を計算し、多次元配列に格納しています。 それをjsp側で受け取る方法がどうしてもわからずに困っています。 ちなみにサーブレットは使用していません。 [JavaBeans:]                ・                ・                ・ public class FallPersonSQL { public int check[][] = new int[7][4]; public int[][] getCheck(){                (略) return check; } } ******************************************************** [jsp:]                ・                ・                ・  <input type="text" value="<jsp:getProperty name="fallperson" property="check" />" />                ・                ・                ・ これだけですと、[[I@1fc7299 や [[I@198c113 と更新するたびに値が変わり表示されます。 ・Beanの取得の宣言方法が根本的に違っているのでしょうか? ・いったんjsp側で配列に格納し直さなければならないのでしょうか? ・Beanの作成時になにか行わなければならないのでしょうか? どなたがご教授のほどよろしくお願いいたします。

    • ベストアンサー
    • Java
  • 多次元配列から任意の配列を取り出す

    すいません。phpを初めて勉強中なのですが、少し分からない事があります。 例えば以下のような二次元配列なのですが、私がやりたい事は「キーを使った並び替え」と 「特定のキーの排除」を行い、任意の順番でテキストを展開させたいです。 foreachで回して配列をソートし3つのテキストを展開するまではできたのですが、 キーが「y」となっている配列のみを抜き出すというのがどうすれば良いのでしょう? いろいろサイトを見てるのですが、特定のキーが入っている配列を抜き出す(または排除) というのは無く、値を抜き出すなどしかありません・・。 $food["1"]["y"]= "aaa1.txt"; $food["2"]["e"]= "aaa2.txt"; $food["3"]["y"]= "aaa3.txt"; $food["4"]["y"]= "aaa4.txt"; ↓ $food["1"]["y"]= "aaa1.txt"; $food["3"]["y"]= "aaa3.txt"; $food["4"]["y"]= "aaa4.txt";

    • ベストアンサー
    • PHP
  • jsp内で値の取得

    JAVAの知識があまりありません。 <div id="aaa">100</div>や <input type="hidden" name="aaa" value="100" /> などの値を条件式で <% if (aaa == 100) { %>~ のようにjspで使いたいのですが、 一度データをサーバに送らないと使えませんか? データをサーバに送らずに上記のように使用できる 方法がありましたら、教えてください。 宜しくお願いいたします。

専門家に質問してみよう