我有一个视图(.xhtml),该视图包含一个dataTable。在dataTable中,有一个名为“Type”的列对应于属性“CTYPE”。 CTYPE存储三种类型的值:'AB','BC'和'CD'。然后我有一个Enum,将这些值转换为更合适的字符串。 例如:'AB' - > '我的字符串测试1'等等,其中'AB'是键,'My String test 1'是对应的描述(值)。 上面提到的dataTable的列(“Type”)显示了每个键的描述,即,它代替'AB'显示'My String test 1',依此类推。 该列是一个sorteableColumn,并有一个sortKey ='CTYPE',按类型对列进行排序。问题是我想按描述而不是按键对列进行排序。所以,我想按'My String test 1','My String test 2'排序......而不是'AB','BC'... 为了实现这一点,我的sortKey必须能够访问Enum并将密钥转换为相应的描述。但是,我无法做到这一点。
我的.xhtml:
<p:column>
<f:facet name="header">
<ccomponent:sortableColumn model="#{typeSearchM}"
controller="#{typeSearchC}"
label="#{msg['labels.types.type_method']}"
sortKey="CTYPE" />
</f:facet>
<h:outputText value="#{msg[typeDTO.getTypesMethod()]}" />
</p:column>
我的TypeDTO.java:
public String getTypesMethod() {
return DestinationTypeDomain.getDescByKey(typeData.getCType());
}
其中DestinationTypeDomain是将密钥转换为描述的枚举。 我想要的是将sortKey改为:
sortKey="#{DestinationExpeditionDomain.getDescByKey(typeDTO.destinationDesc)}"
答案 0 :(得分:0)
我通常让@ApplicationScoped
托管bean执行这种职责。忘记在枚举中直接硬编码描述,如果有一天你想添加多语言支持,它会使事情变得更复杂。只需使用原始枚举:
@ManagedBean
@ApplicationScoped
public class UtilsBean{
public String typeDescription(Type type){
switch (type){
case AB: return "My String test 1";
//Add every single case
}
}
}
然后你只需要在你想要的地方使用它,它可以用于你的应用程序的每个视图:
<p:column sortBy="#{utilsBean.typeDescription(type)}">
#{utilsBean.typeDescription(type)}
</p:column>