- PR -

繰り返し入力フィールドと表示のみのフィールドの混在方法

投稿者投稿内容
マリン
常連さん
会議室デビュー日: 2006/05/28
投稿数: 41
投稿日時: 2007-06-06 22:28
皆様、たくさんのご回答ありがとうございます。

> civi様
サイトの方、他の記事も参考にさせていただいています。この場を借りてお礼申し上げます。
で、どうしてもStrutsタグを使わなくてはいけないということはありません。単に私が最初にJavaでのWebアプリ構築を学んだのがSpring+Hibernate+Strutsという構成だったのでJSTLにふれる機会がほとんどなかったというだけのことでして…たしかにc:outならvalue="${list[i].name}"といった記述ができてescapeXml属性もデフォルトでtrue扱いでしたね。すっかり失念しておりました。

> マーサ様
Strutsに限らずフレームワークと呼ばれるものは内容が膨大なので最初のとっかかりがつかめないとなかなか手が出せませんよね。ですので「Apache Strutsアプリケーション開発入門」、オライリーの「プログラミングJakarta Struts」と「Jakarta Strutsクックブック」は一通り読んでいたのですが、今回のような繰り返し入力フィールドの実現方法に関してはどれも「入力フィールドのみ」のデザインを構築するための最低限のサンプルしか掲載されていなかったので、自分で試行錯誤してみたもののなかなか応用がきかなかったという次第です。
bean:defineもその試行錯誤の中で検討はしたのですが、vlkr様のおっしゃる通りインデックスを使ったアクセスの記述ができなかったもので…。

> vlkr様
私の質問の意図と試行錯誤の流れまでも理解していただけたようでありがたいです。 bean:writeやbean:defineでインデックスを使用するアクセスがどうにもできずに行き詰まっておりました。私の中では「ActionFormは入力・更新に関連するプロパティのみを持つもの」という意識があったので、表示用でしか使われない情報をListFormに持たせたくなかった…というのは最初の投稿の最後の方で申し上げていた通りです。(でも皆さんそういう風にしているんでしょうかね?)

> 杏様
何度もお付き合いいただき、ありがとうございます。提示しているソースは飽くまでサンプルではありますが、実際のソースもほぼ同じ構成であり、動作を検証したものを投稿しております。ですので<html:text name="detail" property="amount" indexed="true"/>に相当する部分も
<input type="text" name="detail[0].amount">
<input type="text" name="detail[1].amount">

というようになっていることを確認済みですので恐らく大丈夫かと思います。

logic:iterateでループさせているコレクションとは別のListから特定の要素を取り出すためにlogic:iterateのoffset属性指定によるアクセス方法もとりあえずは動作することを確認済みですが、やはりcivi様もおっしゃる通りlogic:iterateの普通(?)の使い方ではない気がしていましたし、<c:out value="${list[i].name}"/>という記述が一番シンプルな気がしたのでこの方法でいこうと思います。ありがとうございました。

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