- PR -

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

投稿者投稿内容
はちぃ
常連さん
会議室デビュー日: 2004/12/20
投稿数: 29
投稿日時: 2006-06-27 13:42
的をはずし申し訳ないです。

ひとつ確認させて下さい。

以下の考え方ではないのでしょうか。
*スペースを使うため、コードブロック化しておきます。
コード:

          固定
一次元  −−−−−−−−−−−−−−→ニ次元
 |商品1 チェックボックス1・・・・チェックボックス10
 |・
可|・
変|・
 |・
 |商品N
 ↓

ina
ベテラン
会議室デビュー日: 2005/04/14
投稿数: 58
投稿日時: 2006-06-27 13:51
inaです。
....
えーと、はちぃさんと同じような方法を私も考えていました。
(商品Beanをあえて作らない方法でやろうとしていたので説明がややこしくなっていましたが・・・)

ただし、
 1)商品コード(?)の部分(a〜n)の部分を、次のアクションで上手く受け取れない
  → Map<String 商品コード, ItemBean 商品>
    といった形式にした方がよいのかなと思った。
    ※MapではなくList形式で、商品Beanに String code を追加して、JSP側で<html:hidden>とした方が簡単でしたね。
 2)チェックボックスが複数
  → String ではなく List<String> checkedList とし、<logic:iterate>で回す

といったイメージが私の最終イメージでした。

コード:
ItemBean -----------------
private String name;
private String code;
private List checkedList = new ArrayList();
String getChecked(int i) {
  while (checkedList .size() < (i + 1)) {
    checkedList .add("");
  }
  return (String) checkedList .get(i);
}


jsp -----------------------
<logic:iterate id="item" name="items" indexed = "i">
    <html:hidden name="xxForm" property='<%= "item[" + i +"].code" %>'  />
    <bean:write name="item" property="name" />
    <logic:iterate id="checked" name="item" property="checkedList" indexed = "j">
      <html:multbox name="xxForm" property='<%= "item[" + i +"].checked[" + j +"] %>' value='<%=String.valueOf(j + i)%>' />
  ※↑この方法ではvalueが上手くいかないかも。
    </logic:iterate>
</logic:iterate>







最初からこのようなイメージを上手く記述できていたら良かったのですが、私の説明能力不足(+怠慢)のために、話をややこしくしてしまいました。
反省しています。
(はちぃさん、コードイメージどうもありがとうございました)
以上です。
はちぃ
常連さん
会議室デビュー日: 2004/12/20
投稿数: 29
投稿日時: 2006-06-27 14:15
ina様の仰る方法でいけるかと思いますが、
あまり、スクリプトを組み込まない方法であれば
以下でもいけるかと思います。

イメージとしては私もina様と同様ですね。
実装方法が少し違うだけかと。
どちらの実装が良いかは、私では判断できませんが。

コード:


ItemBean -----------------
private String code
private String name
private List checkBoxList

CheckBoxBean -------------
private boolean checked

Action -------------------
List items = new ArrayList();
for (int i = 0; i < 10; i++) {
ItemBean item = new ItemBean();
itemの設定
  List checkBoxList = new ArrayList();
for (int i = 0; i < 10; i++) {
CheckBoxBean checkBox = new CheckBoxBean();
checkBoxの設定
checkBoxList.add(checkBox);
}
item.setCheckBoxList(checkBoxList);
items.add(item);
}
request.setAttribute("items", items);

jsp -----------------------
<logic:iterate id="item" name="items">
<bean:write name="item" property="name" />
<logic:iterate id="checkBox" name="item" proerty="checkBoxList">
<html:checkbox name="checkBox" property="checked" />
</logic:iterate>
</logic:iterate>




正直、valueを渡す必要があるかわからないので、
省いちゃいました。
きっと(試してないので)チェックをつければ、CheckBoxBeanのcheckedが
trueになってくれるはずなので。


--------------------
14:23 コードの間違えを修正
15:10 コードの間違えを修正

[ メッセージ編集済み 編集者: はちぃ 編集日時 2006-06-27 14:23 ]

[ メッセージ編集済み 編集者: はちぃ 編集日時 2006-06-27 15:11 ]
NV
ベテラン
会議室デビュー日: 2003/05/20
投稿数: 73
投稿日時: 2006-06-28 12:59
>>inaさん
>>はちぃさん

返事が遅れました。
詳しいご意見ありがとうございます。とても参考になります。

この辺の書き方等を知らなかったのは、良く理解していないことを気づかせてくれます。
 ↓
<html:multbox name="xxForm" property='<%= "item[" + i +"].checked[" + j +"] %>' value='<%=String.valueOf(j + i)%>' />

基本として、タグがどのような形でHTML出力され、どのような方法でGETTER/SETTERが呼ばれるかを理解していないと、「あちらを立てればこちらが立たず」になってしまいます。

いろいろ試した結果、100%理解している訳ではありませんが、とても参考になりました。

ありがとうございました。

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