Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Javaでも。
[go: Go Back, main page]

■Wicket version1.1 beta2 - ListMultipleChoice

ListMultipleChoice を使ってみる

ListMultipleChoice は複数選択可能な <select> のコンポーネントです。
同じく <select> を扱う ListChoice, DropDownChoice と基本的な扱い方は似ています。

ではでは、今回もよく使いそうな使い方を取り上げます。
まずは、Java コード部分。

final List choiceData1 = Arrays.asList(new String[]{"data1", "data2", "data3"});
ListMultipleChoice choice1 = new ListMultipleChoice("choice1", choiceData1);
form.add(choice1);

上のコードを見てもらえばわかる様に、初期化の手順に関しては DropDownChoice, ListChoice の時と変わりません。
<select> のラベルとして表示するデータを List でコンストラクタに渡してやります。
いつもの様に Model は Form に CompoundPropertyModel をセットしていると思ってください。

ただ、最初に言ったように ListMultipleChoice は複数選択可能な <select> を扱います。
そのため、ListChoice などとは違って Web ページで入力された結果は List で受け取ります。
List の中身は初期化の時に ListMultipleChoice に渡したリストデータの中身の内、画面で選択されたものです。

Java コードの他の部分に関しては DropDownChoice, ListCohice と大体同じです。

次はレイアウトを記述した HTML での記述。
これは他の Choice コンポーネントと同じで、<select> タグで wikcet:id を指定するだけです。

<select wicket:id="choice1"></select>

実行時にはここにデータが挿入されてリストが作られます。

サンプルコード

今回作ったサンプルコードの一覧。

ということでまずは SampleApp.java。
いつも通りのお決まりパターンです。

package javademo.wicket;

import wicket.protocol.http.WebApplication;

public class SampleApp extends WebApplication {

    public SampleApp(){
        getPages().setHomePage(ListMultipleChoiceSample.class);
    }
}

次、ListMultipleChoiceSample.java。
画面の作りは、リストボックス 2 つにボタンを持ったフォームとメッセージ表示のための領域があるだけのものです。
ポイントは入力されたデータを格納する Input クラスのプロパティが List なところ。

package javademo.wicket;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import wicket.markup.html.WebPage;
import wicket.markup.html.form.ChoiceRenderer;
import wicket.markup.html.form.Form;
import wicket.markup.html.form.ListMultipleChoice;
import wicket.markup.html.panel.FeedbackPanel;
import wicket.model.CompoundPropertyModel;

public class ListMultipleChoiceSample extends WebPage{

    
    public ListMultipleChoiceSample(){
        final Input input = new Input();
        setModel(new CompoundPropertyModel(input));
        
        FeedbackPanel feedback = new FeedbackPanel("feedback");
        add(feedback);
        
        Form form = new Form("form", feedback){
            public void onSubmit(){
                info(input.toString());
            }
        };
        add(form);
        
        final List choiceData1 = Arrays.asList(new String[]{"data1", "data2", "data3"});
        ListMultipleChoice choice1 = new ListMultipleChoice("choice1", choiceData1);
        form.add(choice1);

        ArrayList userList = new ArrayList();
        userList.add(new User("01", "user1"));
        userList.add(new User("02", "user2"));
        userList.add(new User("03", "user3"));
        //ChoiceRenderer renderer = new ChoiceRenderer("name", "id");
        ChoiceRenderer renderer = new ChoiceRenderer("name");
        
        ListMultipleChoice choice2 = new ListMultipleChoice("choice2", userList, renderer);
        form.add(choice2);
    }
    
    public class Input{
        public List choice1 = new ArrayList();
        public List choice2 = new ArrayList();
        
        public String toString(){
            return "choice1=" + listToStr(choice1) + "  ,choice2=" + listToStr(choice2); 
        }
        
        private String listToStr(List list){
            StringBuffer buf = new StringBuffer();
            for(int i=0; i<list.size(); i++){
                buf.append(list.get(i).toString() + ",");
            }
            return buf.toString();
        }
    }
    
    public class User{
        public String id;
        public String name;
        
        public User(String id, String name){
            this.id = id;
            this.name = name;
        }
        
        public String toString(){
            return "user[id=" + id + ", name=" + name + "]";
        }
    }
}

画面レイアウトを記述した ListChoiceSample.html。

<?xml version="1.0" encoding="Shift_JIS"?>
<html>
<body>
<form wicket:id="form">
choice1:<br>
<select wicket:id="choice1"></select><br>
choice2:<br>
<select wicket:id="choice2"></select><br>
<input type="submit">
</form>
<span wicket:id="feedback">feedbackmessages will be put here</span>
</body>
</html>

最後は web.xml。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
      PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
      "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
    <display-name>Wicket Examples</display-name>
    <servlet>
        <servlet-name>SampleApp</servlet-name>
        <servlet-class>wicket.protocol.http.WicketServlet</servlet-class>
        <init-param>
          <param-name>applicationClassName</param-name>
          <param-value>javademo.wicket.SampleApp</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>SampleApp</servlet-name>
        <url-pattern>/sample</url-pattern>
    </servlet-mapping>
</web-app>

まとめ

ListMultipleChoice を使う上でのポイント。

  1. リストデータは List で渡す。
  2. 画面で入力された内容は List で受け取る。
  3. HTML の中は <select> タグで wicket:id を指定する。