Sealyu

          --- 博客已遷移至: http://www.sealyu.com/blog

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks

          enmu基本知識(shí)

          //簡單的枚舉

          public enum Planet {
              MERCURY ,
              VENUS

          }

          //負(fù)責(zé)的枚舉

          public enum Planet {
              MERCURY (3.303e+23, 2.4397e6),
              VENUS   (4.869e+24, 6.0518e6)

          private final double mass;   // in kilograms
              private final double radius; // in meters

          //MERCURY (3.303e+23, 2.4397e6)里面的參數(shù)與構(gòu)造函數(shù)對應(yīng)

          Planet(double mass, double radius) {
                  this.mass = mass;
                  this.radius = radius;
              }

          public double getmass()   { return mass; }
              public double getradius() { return radius; }

          }

          在jsf頁面使用Enmu

          <h:selectOneMenu id="CustomerStatusList" value="#{customerAccountsAction.status}">
                 <s:selectItems value="#{customerStatusList}" var="_s" label="#{_s.label}" noSelectionLabel="" />
                 <s:convertEnum />
                </h:selectOneMenu>

           @Factory
           public CustomerAccountStatus[] getCustomerStatusList() {
            return CustomerAccountStatus.values();
           }

          package org.manaty.model.party.customerAccount;

          public enum CustomerAccountStatus {
              ACTIVE("Actif"),LOCKED("Verrouill"u00E9"),CLOSED("Ferm"u00E9");

           private String label;

              CustomerAccountStatus(String label) {
            this.label = label;
           }

           public String getLabel() {
            return label;
           }
          }

          目前存在的問題是label="#{_s.label}"沒法國際化,如果要在列表中國際化就應(yīng)該 在getCustomerStatusList()

          方法中修改枚舉的label值,如此給CustomerAccountStatus增加setLabel方 法,getCustomerStatusList()方法中循環(huán) CustomerAccountStatus.values(),取出枚舉值的name,然后再去資源文件中獲取對應(yīng)的國際化label。、

          問題在于這樣就修改了枚舉值本身的內(nèi)容,而枚舉值的含義是相當(dāng)于常量,常量是不可以改變的。

          最新解決辦法

          不用label來顯示enmu,直接用enmu.name()來作為key去資源文件中取對應(yīng)的國際化

          <h:selectOneMenu id="CustomerStatusList" value="#{customerAccountsAction.status}">
                 <s:selectItems value="#{customerStatusList}" var="_s" label="#{messages[_s.name()]} " noSelectionLabel="" />
                 <s:convertEnum />
                </h:selectOneMenu>

          為什么使用_s.name()而不使用 _s.label呢?

          因?yàn)閘abel是特定enmu的方法,,而不是所有enmu有的方法,這樣_s.label就不通用了。

          原帖地址: http://yourenyouyu2008.javaeye.com/blog/351703
          posted on 2009-03-31 15:09 seal 閱讀(264) 評論(0)  編輯  收藏 所屬分類: Seam
          主站蜘蛛池模板: 晴隆县| 胶州市| 二手房| 许昌市| 平昌县| 鲁山县| 北京市| 盐亭县| 台中县| 沛县| 蕉岭县| 科尔| 玉龙| 阿尔山市| 秭归县| 建水县| 金阳县| 广元市| 安达市| 盐山县| 康乐县| 巫山县| 永福县| 图们市| 桦川县| 寿阳县| 凤翔县| 靖安县| 大埔区| 新郑市| 赤城县| 苍山县| 阿图什市| 明溪县| 雅安市| 南雄市| 灵武市| 高碑店市| 安溪县| 沂南县| 界首市|