- PR -

《Struts》フォーム数が不定なActionFormの実装について

1
投稿者投稿内容
NV
ベテラン
会議室デビュー日: 2003/05/20
投稿数: 73
投稿日時: 2006-06-13 12:38
Struts1.2にてアプリを実装しております。

例えば、セレクトボックスの数が動的に変化する場合、それを受けるActionFormの実装はどのようになるのでしょうか?

ちなみに、実際の実装は、ValidatorForm を使用しております。

<select name="box1"></select>
<select name="box2"></select>
<select name="box3"></select>
   :
   :
  不定

public class TestForm extends ValidatorForm {
 private String box1;
   ?


ご教授いただけたら幸いです。


[ メッセージ編集済み 編集者: NV 編集日時 2006-06-13 12:40 ]
ina
ベテラン
会議室デビュー日: 2005/04/14
投稿数: 58
投稿日時: 2006-06-13 17:36
えーと、
 同じ内容(例:都道府県)のセレクトボックスを幾つか(不定)作りたい
って話ですか?

だったら、
private List selectedItems; //選択結果
private List comboItems; //セレクトボックスの中身
とか。

...

というか、
 ・どうしたいのか?
 ・どこで困っているのか?(+試してみたこと)
などなど、もっと具体的に書いてもらえないと、分からないっす。
NV
ベテラン
会議室デビュー日: 2003/05/20
投稿数: 73
投稿日時: 2006-06-13 18:53
>>同じ内容(例:都道府県)のセレクトボックスを幾つか(不定)作りたい
>>って話ですか?

はいその通りです。
例えば下記ように、セレクトボックスが一つの場合は、

 <select name="box1">
  <option value="A">A型</option>
  <option value="B">B型</option>
  <option value="O">O型</option>
  <option value="AB">AB型</option>
 </select>

public class TestForm extends ValidatorForm {
 private String box1;
 public String getBox1(){}
 public void setBox1(){}
}

で、パラメータを受けられると思いますが、セレクトボックスが無数にある場合のActionFormの実装方法が見当つきません。

 <select name="box1">
  <option value="A">A型</option>
  <option value="B">B型</option>
  <option value="O">O型</option>
  <option value="AB">AB型</option>
 </select>
 <select name="box2">
  <option value="A">A型</option>
  <option value="B">B型</option>
  <option value="O">O型</option>
  <option value="AB">AB型</option>
 </select>
 <select name="box3">
  <option value="A">A型</option>
  <option value="B">B型</option>
  <option value="O">O型</option>
  <option value="AB">AB型</option>
 </select>
   ・
   ・
   ・
   無数

セレクトボックスが無数にある場合のname属性の付け方と、FormActionの変数の実装方法が疑問点となります。

以上、説明が下手で申し訳ございません。


nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-06-13 22:56
name属性をおなじにして配列で受け取る手法は?
HTTPで配列ってのは何かと使いにくいので
個人的には好きではないのですが。
ina
ベテラン
会議室デビュー日: 2005/04/14
投稿数: 58
投稿日時: 2006-06-13 23:21
えーと、(セレクトボックスに限ったお話では無いのですが)
そういった場合はname属性を同じにして要素をList型にするのが良いと思います。

例)
コード:
【アクションフォーム側】
private List sexTypes = new ArrayList();
public List getSexTypes() {
  return sexTypes;
}
/** 添字を指定してのゲッター */
public String getSexType(int i) {
  while (sexTypes .size() < (i + 1)) {
    sexTypes .add("");
  }
  return (String) sexTypes .get(i);
}
【JSP側】
<logic:iterate id="sexType" name="xxForm" property="sexTypes" indexId="i">
<html:select name="xxForm" property='<%= "sexType[" + i + "]" %>'>
    <option value="A">A型</option>
    <option value="B">B型</option>
    <option value="O">O型</option>
    <option value="AB">AB型</option>
</html:select>
</logic:iterate>



ポイントは
 ActionForm側) 添字を引数とするゲッターを用意すること
 JSP側) プロパティ属性の値を 「プロパティ名+[i]」とすること
の2点で、このようにしてあげないと
 「(想定される次のアクションで)選択した結果を意図通りに受けることができない」
からです。

※この実装方法は
 秀和システム 「カンタン Struts1.2」
  7-15 List型のプロパティを持つActionForm
のやり方を、ほぼそのまま記述しています。
「なぜ、こんな事をやらなければいけないか?」などの理由も記述されていますので、購入するなり、立ち読みするなりすることを是非ともお勧めします。

NV
ベテラン
会議室デビュー日: 2003/05/20
投稿数: 73
投稿日時: 2006-06-14 09:06
なるほど。

name属性を同じにして配列として受け取れるのですね。
この辺に関しては無知でした。

inaさん、nagiseさんありがとうございます。
1

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