2014-09-05 57 views
0

我有一個視圖(.xhtml),該視圖包含一個dataTable。在dataTable裏面有一個名爲「Type」的列對應於屬性「CTYPE」。 CTYPE存儲三種類型的值:'AB','BC'和'CD'。然後我有一個Enum,將這些值轉換爲更適合的字符串。 例如:'AB' - >'我的字符串測試1'等,其中'AB'是關鍵字,'我的字符串測試1'是對應的描述(值)。 上面提到的dataTable的列(「Type」)顯示了每個鍵的描述,即代替'AB'它顯示'My String test 1',依此類推。 該列是一個sorteableColumn,並具有按類型對列進行排序的sortKey ='CTYPE'。問題是我想按描述排序列而不是按鍵。所以,我想按照'我的字符串測試1','我的字符串測試2'...而不是'AB','BC'... 爲了實現這一點,我的sortKey必須有權訪問Enum並將密鑰翻譯成相應的描述。但是,我並沒有設法做到這一點。訪問xhtml視圖內的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

我通常會讓一個@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> 
+0

我如上面一樣。你的回答是有道理的。當頁面加載一切都是正常的(和以前一樣)。但是,當我嘗試對列進行排序時,表變爲空,並且在控制檯上顯示此錯誤:「」任何想法爲什麼? – Rita 2014-09-08 10:09:32

+0

我認爲這可能是因爲參數而發生的。 – Rita 2014-09-08 10:18:16

+0

您需要EL 2.2才能在EL表達式中使用參數。看看[this](http://stackoverflow.com/a/3284328/1199132)。 – 2014-09-08 10:45:05