2013-01-24 71 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