Befor  Home  Next 


5) フォームオブジェクトを配列で受け取る方法

帳票系のWebフォームを作成する時などに、同じ項目を持つ複数のコントロールを作成することがあります。
Weberは、帳票レイアウトの1行を1つのフォームオブジェクトとして扱い、複数のコントロールを配列として 受け取ることができるような仕組みを提供しています。

例えば、以下のようなWebフォームがあったとします。


この画面は、1行がid、nameからなるテキストボックスが複数個配置されたフォーム画面になっています。
通常は、フォーム画面に配置された個々のコントロールがフォームオブジェクトの各プロパティに括り付けられる ことになりますが、ここでは、id, nameを1つのフォームオブジェクトに対応し、これらの入力結果をフォーム オブジェクトの配列で受け取るための方法をご紹介します。

フォーム画面の構成とこの画面に対応するクラスは以下のような関係になります。


リクエストを配列で受け取るためには、以下の規則を満たす必要があります。

  • フォーム画面にbean_maped_kindといった名前のコントロールを1つ配置する  (value属性にはlistもしくはarrayを指定する)
  • 配列にするプロパティ名は同じ名前を使用する

  • 以下は、画面とアクションクラスの具体例です。

    (1) Webフォーム(beans_input_list.html)

    <html>
    <head><meta http-equiv="content-type" content="text/html;charset=utf-8"/></head>
    <body>
        <form method="POST" action="./html_4_0/beans/maped_list.wb">
            <!-- リクエストをオブジェクトの配列にマッピングするためのキーワード -->
            <input type="hidden" name="bean_maped_kind" value="list"/>
            <table>
                <tr>
                    <td>id</td><td>name</td>
                </tr>
                <tr>
                    <td><input type="text" name="id" value="1"/></td>
                    <td><input type="text" name="name" value="taro"/></td>
                </tr>
                <tr>
                    <td><input type="text" name="id" value="1"/></td>
                    <td><input type="text" name="name" value="taro"/></td>
                </tr>
                <tr>
                    <td><input type="text" name="id" value="2"/></td>
                    <td><input type="text" name="name" value="hanako"/></td>
                </tr>
                <tr>
                    <td><input type="text" name="id" value="3"/></td>
                    <td><input type="text" name="name" value="jiro"/></td>
                </tr>
            </table>
            <input type="submit" value="複数のパラメータをオブジェクト配列(LIST)にマッピング"/><br/>
        </form>
    </body>
    </html>

    (2) フォームクラス(weber_4_0_sample.org.itscool.beans.Beans.java)

    package weber_4_0_sample.org.itscool.beans;
    
    import java.util.List;
    
    public class Beans {
        private int id;
        private String name;
    
        public int getId() { return id; }
        public void setId(int id) { this.id = id; }
    
        public String getName() { return name; }
        public void setName(String name) { this.name = name; }
    }

    (3) アクションクラス(weber_4_0_sample.org.itscool.beans.BeansMapedListAction.java)

    package weber_4_0_sample.org.itscool.beans;
    
    import java.util.List;
    import org.itscool.weber.action.Action;
    import org.itscool.weber.action.ActionBucket;
    
    public class BeansMapedListAction extends Action{
        public String doExecute(ActionBucket bucket) throws Exception{
            //BeansオブジェクトをListで取得
            List form = (List)bucket.getForm();
            
            bucket.setAttribute("beans", form);
            
            return "result";
        }
    }

    Befor  Home  Next