2013-01-24 70 views
0

我有一些jxpath我想將它們放在一個枚舉中我將與一個JSF頁面共享一個映射,這個映射將使它們可用於EL,作爲jxpath的鍵來執行createPathAndSetValue。jxpath的Java枚舉

然後我可以很容易地填寫一個模型,而不需要創建大量的getter和setter。 這樣的:

<h:inputText value="#{backingBeanMap[backingBeanMap.billingAddress_postalCode]}" /> 

我有這樣的事情

public enum MWField { 
    isGiftJoin, 
    billingAddress_postalCode, 
    ... 
    associates$3_memberInfo_membershipType_type; 

    public final String xpath; 

    MWField(){ 
     this.xpath = name().replace('_', '/').replace("$0", "[0]") 
     .replace("$1", "[1]").replace("$2", "[2]") 
     .replace("$3", "[3]").replace("$4", "[4]") 
     .replace("$5", "[5]").replace("$6", "[6]") 
     .replace("$7", "[7]").replace("$6", "[6]") 
     .replace("$9", "[9]").replace("$10", "[10]"); 
    } 
} 

我使用的名稱isGiftJoin或billingAddress_postalCode而不是大寫名稱和做的替代_用/在構造函數(這樣的XPath屬性是實際的xpath)。只要名稱中沒有任何屬性(他們沒有),我就完成了。枚舉不會是「大寫」,但枚舉不是常量,因爲RED是常量。在這裏它們是指向數據的類的實例,並不打算以這種方式「恆定」。

這些名字是不是太古怪而且不規範?鏈接到C風格不變的大寫標準是愚蠢的嗎?

回答

1

你問你是否你可能無論你想要什麼名稱的枚舉?

當然;爲什麼不?使用適合您的標準。就我個人而言,我只對靜態決賽保留所有大小寫,並且傾向於枚舉值的類命名約定。

我是不是是名字中下劃線的巨大粉絲,但就您的情況而言,由於您故意創建分層結構,所以我對它的問題較少。

懷疑,如果一個枚舉是命名路徑真的有必要:你需要使用它們在switch語句中(在JDK 6或更少)?是否有理由將它們表示爲除字符串以外的任何內容?沒有路徑的名字是否有價值?

+0

JSF和java需要同步,並且正確獲取xpaths可能會非常棘手,因此我將使用junit測試來檢查元素是否被正確引用。這樣我可以回收其他支持bean的xpath。我可以讓他們在其他類中的字符串,但id jave有字符串SOME_JXPATH =「some/jxPath」,這似乎愚蠢和容易出錯,當我只能輸入名稱/路徑一次。 – ggb667

+0

是不是一個枚舉實際上是一個枚舉類的公共靜態最終實例? –

+0

是的,這些名字實際上很有價值,而且這個解決方案的確做得相當好。 – ggb667