- - PR -
logic:iterateタグの使い方
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-11-20 18:50
いつもお世話になっております。
Struts1.2.9のlogic:iterateタグの使い方についての質問です。 アクションフォームを使って複数のString型配列をセッションに登録したくて、 iterateタグを使えばできると思っていろいろ調べてみたのですが、 このタグではMapインタフェースなどを除いて、ループ内に1つの項目しか入出力できないのでしょうか。 初歩的な質問で申し訳ありませんが、よろしくお願いします。 アクションフォーム (クラス名:Form1) private String[] kanji = new String[30]; private String[] kana = new String[30]; アクション session.setAttribute("INF",form1); JSP(このコーディングでは動きませんが、このような処理をしたいという意味で書きました) <logic:iterate id="ID1" name="INF" property="kanji,kana"> <html:text name="ID1" property="kanji" /> 〔<html:text name="ID1" property="kana" />〕 </logic:iterate> |
|
投稿日時: 2006-11-20 19:28
プロパティにkanaとkanjiを持つクラスを作って、
その配列を扱うのがスマートだと思います。 |
|
投稿日時: 2006-11-20 19:33
返信ありがとうございます。
>プロパティにkanaとkanjiを持つクラス とは、アクションフォーム (Form1クラス)とは違うのでしょうか? |
|
投稿日時: 2006-11-21 03:33
これはどうでしょうか?
まず、別の配列に入れているStringたちを Mapかなにかのコレクションに ペアで入れます。 で、Actionで、フォームオブジェクトにしまう。JSPでなんらかのほうほうで そのMAP(か各種コレクションや配列のオブジェクト)を取り出して <logic:iterate id="item" collection="<%=nameMap %>" > <bean:write name="item.kanji" /> [<bean:write name="item.kana" />] </logic:iterate> Strutsの サンプルプログラムに入っていました、実験してみてください。 (struts-examples-x.x.xx.warにiterateのサンプルで入っています。) <コレクションの作り方> Map nameMap=new HashMap(); nameMap.set(漢字、かな)なんとか。 でももしかしたら入れた順番が保障されないかもしてませんので ためしてませんが、前の方がおっしゃっているように Name くらすみたいなのをつくって、プロパティに kanjiとkanaを用意し、 それの配列もしくは、ArrayListオブジェクトにセットしたものを Formに しまう、上記のIterateで 出力。 [ メッセージ編集済み 編集者: mandm 編集日時 2006-11-21 03:44 ] |
|
投稿日時: 2006-11-21 21:35
すみません、説明が不足していました。
この機能を使いたいJSPは画面からDBに名前や住所などのユーザー情報を登録するもので、 テキストエリアなどに情報を入力後、”登録ボタン”を押すとDBに登録します。 その後、同じ画面に戻り、再度入力エリアに入力できるという機能を持っています。 1画面で10件同時入力できるため、logic:iterateでループさせたいのです。 そのため、MAP型の変数に値を入れることはできない、と思います。 (自分が無知なだけで、できるのかもしれませんが) このような機能を持たせたいのですが、どうすればよいでしょうか。 |
|
投稿日時: 2006-11-22 00:07
できますよ。indexed properties というのを使えばOK。
簡単にいうと JSP上で コレクションから出力するときに indexをつけて input textをHTMLで出力して、ActionFormで、index付きのパラメータを 配列にしまってくれます。配列だけではなくてMAPのパターンなどもあります。 JSPで interateでまわして、struts tag に番号を振ってもらい、送信したあと Actionクラスでformから取り出すときには、すでに 配列(やコレクション)に なっているので、そのあとDBにしまい、JSPにForwardしたら 前に入れたデータが出てくる。空の画面を出したいなら その配列を事前に クリアするとか。 長くなるので、こちらを参考に、(英語、くわしい) http://struts.apache.org/1.x/struts-taglib/indexedprops.html 日本語であれば、 http://www.res-system.com/item/242 が参考になると思います。 |
|
投稿日時: 2006-11-22 20:17
教えていただいた日本語版のサイトを見ながら試してみたら、無事できました。
ありがとうございました。 |
1