- PR -

《Struts》 html:checkbox タグについて

投稿者投稿内容
ina
ベテラン
会議室デビュー日: 2005/04/14
投稿数: 58
投稿日時: 2006-06-22 17:25
配列ではなく、MapやListを上手く使えばできるはずですよ。
例)
 mountains_a 〜 mountains_n → TreeMap<String code, List<String> checked>
NV
ベテラン
会議室デビュー日: 2003/05/20
投稿数: 73
投稿日時: 2006-06-23 10:21
アドバイスありがとうございます。

その後試しているのですが、理解不足のようです。
これまでの経過を、一度基本から整理します。
 
【アクションフォーム】
 TestForm extends ActionForm{
  String item;
  String[] items;
  TreeMap itemMap = new TreeMap(); ← どのように何を格納するか?
 }

【JSP】
 ITEM:<html:multibox property="item" value="0"></html:multibox> <!-- いずれか1つのみ受け取り可能 -->
 ITEM:<html:multibox property="item" value="1"></html:multibox> <!-- いずれか1つのみ受け取り可能 -->
 ITEM:<html:multibox property="item" value="2"></html:multibox> <!-- いずれか1つのみ受け取り可能 -->

 ITEMS:
  <html:multibox property="items" value="0"></html:multibox>
  <html:multibox property="items" value="1"></html:multibox>
  <html:multibox property="items" value="2"></html:multibox>

 ITEM_MAP:
  商品A
  <html:multibox property="itemMap[0]" value="0"></html:multibox>
  <html:multibox property="itemMap[0]" value="1"></html:multibox>
  <html:multibox property="itemMap[0]" value="2"></html:multibox>
  商品B
  <html:multibox property="itemMap[1]" value="0"></html:multibox>
  <html:multibox property="itemMap[1]" value="1"></html:multibox>
  <html:multibox property="itemMap[1]" value="2"></html:multibox>
  商品C
  <html:multibox property="itemMap[2]" value="0"></html:multibox>
  <html:multibox property="itemMap[2]" value="1"></html:multibox>
  <html:multibox property="itemMap[2]" value="2"></html:multibox>


どうしてもアクションフォームにてTreeMapやListの使用方法と、GETTER/SETTERの実装方法に理解が及んでないようです。
JSPのITEM_MAP とそれぞれのアクションフォームの対応関係が理解できていません。

また、JSP側の今まで問題だった logic:iterate と html:multibox の使用方法は、大丈夫かなと思っていますがどうでしょう?
NV
ベテラン
会議室デビュー日: 2003/05/20
投稿数: 73
投稿日時: 2006-06-23 12:19
途中報告です。
とりあえず、これまで理解してきたことを追加します。

・基本的に、property属性で指定した名前のGETTERメソッドが呼ばれる。
・インデックス部分は、そのままアクションフォームのインデックスとして使用される。
・インデックスを超えて指定した場合、IndexOutOfBoundsExceptionが発生する。

【JSP】
  <html:multibox property="itemList[0]" value="0"></html:multibox>
【アクションフォーム】
  ArrayList itemList = new ArrayList();
  getItemList(){}

JSPの記述に関しては、何がオブジェクトで何をイテレートすれば良いかを踏まえれば、html:iterate と html:multibox は問題ないと思っています。

以上を踏まえていれば、MapもListもArrayListもできるような気がしてきました。

とりあえず、途中報告です。
NV
ベテラン
会議室デビュー日: 2003/05/20
投稿数: 73
投稿日時: 2006-06-23 13:46
お蔭様で、ArrayListやTreeMapを使用して、実際に値が取れるようにはなりました。

<html:multibox property="item(0)"></html:multibox>
<html:multibox property="item(1)"></html:multibox>

ただ依然として、下記のようなコードにはなれません。
GETTERは、そのpropertyの文字部分が呼ばれると認識しているからです。

<html:multibox name="item" value="1" property="item_A(0)"></html:multibox>
<html:multibox name="item" value="1" property="item_A(1)"></html:multibox>
<html:multibox name="item" value="1" property="item_B(0)"></html:multibox>
<html:multibox name="item" value="1" property="item_B(1)"></html:multibox>


下記についての、ヒントいただければ幸いです。

mountains_a 〜 mountains_n → TreeMap<String code, List<String> checked>

どのような html:multiboxタグの書き方を想定していらっしゃるのでしょうか?
以上、よろしくお願いいたします。


[ メッセージ編集済み 編集者: NV 編集日時 2006-06-23 13:52 ]
ina
ベテラン
会議室デビュー日: 2005/04/14
投稿数: 58
投稿日時: 2006-06-26 22:52
返事が遅くなってしまってすみません。(WEBみていませんでした....)

えーと、すみませんが確認させてください。
 ・mountains_a 〜 mountains_n は固定ですか?

もし、固定で良いとすれば、問題点としては、
 ・マルチボックスの選択結果を受け取る際にIndexOutOfBoundsExceptionが発生する
点を上手く解消してあげれば良いと思います。
でしたら、
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=31269&forum=12
の私の回答の様に、添字を引数にするゲッターを用意してあげれば回避出来るはずです。

※「mountains_a 〜 mountains_n」が固定でないと思ったので、
上記の方法に加えて、a〜n(商品コード?)をキーとしてMAPにすれば上手くいくはずと思い、
 mountains_a 〜 mountains_n → TreeMap<String code, List<String> checked>
と記述しました。


以上です。
※混乱させてしまった様でしたらごめんなさい。
NV
ベテラン
会議室デビュー日: 2003/05/20
投稿数: 73
投稿日時: 2006-06-27 09:06
ご回答ありがとうございます。

いろいろ試した結果、下記のような添え字でうまくいっているようです。

<html:multibox name="item" value="1" property="item(A_0)"></html:multibox>
<html:multibox name="item" value="1" property="item(A_1)"></html:multibox>
<html:multibox name="item" value="1" property="item(A_2)"></html:multibox>
<html:multibox name="item" value="1" property="item(B_0)"></html:multibox>
<html:multibox name="item" value="1" property="item(B_1)"></html:multibox>
<html:multibox name="item" value="1" property="item(B_2)"></html:multibox>

ただ、inaさんのおっしゃられる方法とは異なっているようなので、気になっております。inaさんの方法だと下記であるのかと?
そうであれば、その方法を理解したく思います。

<html:multibox name="item" value="1" property="item_A(0)"></html:multibox>
<html:multibox name="item" value="1" property="item_A(1)"></html:multibox>
<html:multibox name="item" value="1" property="item_A(2)"></html:multibox>
<html:multibox name="item" value="1" property="item_B(0)"></html:multibox>
<html:multibox name="item" value="1" property="item_B(1)"></html:multibox>
<html:multibox name="item" value="1" property="item_B(2)"></html:multibox>


>>えーと、すみませんが確認させてください。
>> ・mountains_a 〜 mountains_n は固定ですか?

inaさんのおっしゃっている固定と言う意味の認識が一致しているかわかりませんが、固定ではなく、不特定多数です。動的に増加します。
上記の例で言うと、チェックボックスが10個、商品数が不特定多数です。

itemA □□□□□□□□□□
itemB □□□□□□□□□□
itemC □□□□□□□□□□
 :
 :
不特定

以上、よろしくお願いします。


[ メッセージ編集済み 編集者: NV 編集日時 2006-06-27 09:09 ]
はちぃ
常連さん
会議室デビュー日: 2004/12/20
投稿数: 29
投稿日時: 2006-06-27 10:57
的を射てるかわかりませんが、、、

商品のBeanを作ってそれをListに格納して、
logic:iterateタグで回せば解決できるのでは?

コード:
ItemBean -----------------
name String
checked String

Action -------------------
List items = new ArrayList();
for (int i = 0; i < 10; i++) {
    ItemBean item = new ItemBean();
    itemを設定する
    items.add(item);
}
request.setAttribute("items", items);

jsp -----------------------
<logic:iterate id="item" name="items">
    <bean:write name="item" property="name" />
    <html:multbox name="item" property="checked" value="1" />
               :
             :
    <html:multbox name="item" property="checked" value="10" />
</logic:iterate>


こんな感じでいけないですかね。
確認していませんが。





NV
ベテラン
会議室デビュー日: 2003/05/20
投稿数: 73
投稿日時: 2006-06-27 12:41
>> はちぃさん

ご意見ありがとうございます。

今回の件で問題となっているのは、2次元配列のようなチェックボックスです。
これらを、どのように識別するかを検討しております

よいアドバイスございましたら、よろしくお願いします。

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