- PR -

logic:iterateタグの使い方

1
投稿者投稿内容
すひろ
大ベテラン
会議室デビュー日: 2006/10/17
投稿数: 124
お住まい・勤務地: 愛知県
投稿日時: 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>
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-11-20 19:28
プロパティにkanaとkanjiを持つクラスを作って、
その配列を扱うのがスマートだと思います。
すひろ
大ベテラン
会議室デビュー日: 2006/10/17
投稿数: 124
お住まい・勤務地: 愛知県
投稿日時: 2006-11-20 19:33
返信ありがとうございます。

>プロパティにkanaとkanjiを持つクラス
とは、アクションフォーム (Form1クラス)とは違うのでしょうか?
mandm
常連さん
会議室デビュー日: 2005/06/04
投稿数: 30
お住まい・勤務地: ニューヨーク
投稿日時: 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/10/17
投稿数: 124
お住まい・勤務地: 愛知県
投稿日時: 2006-11-21 21:35
すみません、説明が不足していました。

この機能を使いたいJSPは画面からDBに名前や住所などのユーザー情報を登録するもので、
テキストエリアなどに情報を入力後、”登録ボタン”を押すとDBに登録します。
その後、同じ画面に戻り、再度入力エリアに入力できるという機能を持っています。
1画面で10件同時入力できるため、logic:iterateでループさせたいのです。

そのため、MAP型の変数に値を入れることはできない、と思います。
(自分が無知なだけで、できるのかもしれませんが)

このような機能を持たせたいのですが、どうすればよいでしょうか。
mandm
常連さん
会議室デビュー日: 2005/06/04
投稿数: 30
お住まい・勤務地: ニューヨーク
投稿日時: 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/10/17
投稿数: 124
お住まい・勤務地: 愛知県
投稿日時: 2006-11-22 20:17
教えていただいた日本語版のサイトを見ながら試してみたら、無事できました。
ありがとうございました。
1

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