ロケール切り替えに、DropDownChoice? を使ったので合わせて勉強する

こんな感じのアプリを作る

international.gif
  1. 起て、地に捕われたる者よ!起て、飢えに苦しむ者よ!正義は怒声を揚げる、最後の雄叫びなのだ。過去を白紙に戻せ、群集よ、奴隷よ、起てよいざ!世界は覆えりて我らに能わざる事なし!
  2. 尊き救い主も、神も皇帝も扇動家も要らぬ。労動者よ、己が力で生きるのだ!共通の挨拶をしよう!盗人に報いを払わせ、独房の恨みを忘れぬように。製鉄所を奪いとれ、時機を失せず行動せよ!
  3. 圧制と悪法あふれ、税は薄幸の民を蝕む。資産家には義務なく、貧者には権利など無きに等しい。監獄などもう沢山だ。平等の精神は新しき法を要求する。平等とは、義務なき権利でも権利なき義務でもないのだ!
  4. かの崇拝の醜さ、鉱山と鉄道の支配者らは労働を掠め取るの他、何事も為さなかった。同朋の共有のもと、労働の成果はひとつとなる。労働を取り戻せと叫び、人々は何ら代償を求めない。
  5. 支配者らは我らを煙に巻く。我らには平和、暴君には戦乱あり!蜂起に武器を執りてかの隊列を打ち砕け!人肉をも食む彼奴らが如何に抵抗をするとも、忽ちに知るであろう、この弾丸こそ我らの力である事を。
  6. 労働者、農民われら皆な偉大なる労働団結の一員ぞ。故郷より有閑階級を放逐せよと大地は呼びかけるのだ。いかに彼の貪婪なる搾取者がわが身を蝕もうとも、明日には消え去って、太陽が燦と照らす事だろう!

DropDownChoice? の使い方

  1. InternationalPage?.html
    <?xml version="1.0" encoding="UTF-8"?>
    <html
      xmlns="http://www.w3.org/1999/xhtml"
      xmlns:wicket="http://wicket.apache.org/">
    <head>
    <title></title>
    </head>
    <body>
    <form wicket:id="f">
    <p>
    <select wicket:id="selectedLocale">
      <option value="0">XXXXX</option>
      <option value="1">YYYYY</option>
      <option value="2">ZZZZZ</option>  
    </select>
    </p>
    
    The International
    <fieldset>
    <legend>1</legend>
    Stand up, wretched of the earth
    Stand up, galley slaves of hunger
    Reason thunders in its volcano
    
             (中略)
    
    </form>
    </body>
    </html>
    
    • HTMLは、何の変哲もない <select wicket:id="selectedLocale">...</select>
  2. InternationalPage?.java
    package com.snail.wicket.exam.internationalize;
    
    import org.apache.wicket.markup.html.WebPage;
    import org.apache.wicket.markup.html.form.DropDownChoice;
    import org.apache.wicket.markup.html.form.Form;
    import org.apache.wicket.markup.html.form.IChoiceRenderer;
    import org.apache.wicket.model.PropertyModel;
    
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Locale;
    
    
    public class InternationalPage extends WebPage {
      private static final long serialVersionUID = -6658650430422411331L;
      
      public InternationalPage() {
        Form f = new Form("f");
        add(f);
    
        List<Locale> localeList = new LinkedList<Locale>();
        localeList.add(Locale.FRENCH);
        localeList.add(Locale.JAPANESE);
        localeList.add(new Locale("ru"));
        localeList.add(Locale.CHINESE);
        localeList.add(Locale.ENGLISH);
    
        IChoiceRenderer choiceRenderer = new IChoiceRenderer() {
            private static final long serialVersionUID = 6539188524433191181L;
    
            @Override
            public Object getDisplayValue(Object object) {
              Locale locale = (Locale) object;
    
              return locale.getDisplayName(getSession().getLocale());
            }
    
            @Override
            public String getIdValue(Object object, int index) {
              return index + "_" + object.toString();
            }
          };
    
        DropDownChoice localeChoice = new DropDownChoice(
            "selectedLocale",
            new PropertyModel(getSession(), "locale"),
            localeList,
            choiceRenderer) {
            private static final long serialVersionUID = -8923017502166461576L;
    
            @Override
            protected boolean wantOnSelectionChangedNotifications() {
              return true;
            }
    
            @Override
            protected void onSelectionChanged(Object newSelection) {
              System.out.println("new selection is "
                + newSelection.toString());
            }
          };
    
        f.add(localeChoice);
      }
    }
    
    • IChoiceRenderer? を引数に取る DropDownChoice? のコンストラクタを使うのがミソ
      引数設定値概要
      1"selectedLocale"wicket:idと同じ
      2PropertyModel?Session#getLocale() / Session#setLocale(locale) の値と DropDownChoice? の選択中の値を連動させる
      3IChoiceRenderer?第4引数の List<Locale> を HTML で表現する部品
      4List<Locale>この DropDownChoice? の選択肢
    • IChoiceRenderer?
      IChoiceRenderer choiceRenderer = new IChoiceRenderer() {
          private static final long serialVersionUID = 6539188524433191181L;
      
          @Override
          public Object getDisplayValue(Object object) {
            Locale locale = (Locale) object;
            return locale.getDisplayName(getSession().getLocale());
          }
      
          @Override
            public String getIdValue(Object object, int index) {
            return index + "_" + object.toString();
          }
      };
      • getDisplayValue?(object) : String では、選択される値(この場合 Locale)の HTMLでの表現を返す。
        ここでは、現在のロケールでの、そのロケールの表現を返すようにした。
      • getIdValue?(object,index) : String は、この選択項目の key値 を返す。
        ここでは、index と ロケールの toString() を組み合わせたものにした。
    • コンボボックスの選択値をユーザが変更したときに、submit させるには?
      DropDownChoice#wantOnSelectionChangedNotifications() : boolean
      を Override して、true を返すようにすればいい
    • コンボボックスの選択値をユーザが変更したときの処理はどこに書く?
      DropDownChoice#onSelectionChanged(Object newSelection) : void
      を Override して、その中に記述する。

Localeは何処に格納されていて、初期状態では何が入っている?

Session に格納されている Locale によって、表示するテンプレートHTMLを変えたい


Java#Wicket


添付ファイル: fileFirefoxLocale.png 772件 [詳細] fileWicketInternational.png 802件 [詳細] fileinternational.gif 921件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   sitemap
Last-modified: 2008-03-18 (火) 22:35:09 (3182d)
ISBN10
ISBN13
9784061426061