2016-12-14 45 views
1

我具有由域的列表填充的p:datatable對象Primefaces dataTable中,對局部枚舉濾波器值

每個域對象具有被綁定到enum PrivateIndustry的值:P,K或N,其對應於一個數據庫值。

然後通過本地化labels_LOCALE.properties將這些值呈現在p:dataTable中,以使它們成爲人類可讀的,並且使用com.package.PrivateIndustry.P/K/N語法。

這對可讀性的作品好,但是當我使用PF('dataTableId').filter()過濾數據表,我不能過濾的本地化的值,只有純粹的枚舉值(即P,K或N)

即:

<p:column headerText="#{labels.header}" 
     filterBy="#{domainobject.privateIndustry}" filterStyle="display: none" 
     sortBy="#{domainobject.privateIndustry}" > 
     <h:outputText value="#{domainobject.privateIndustry}"/> 
    </p:column> 

我可以通過使用ResourceBundle.getString("com.package.PrivateIndustry...")作爲字符串填充域對象中的名稱來彌補這一點,但這看起來似乎沒有必要和錯綜複雜。

我可以分析filterBy=""具有更好的價值,或者讓客戶端上的數據PF().filter()工作?

+1

您始終可以實施自定義過濾器...請參閱PF文檔 – Kukeltje

回答

0

這是我解決了代碼的功能,而不是在XHTML方式:

在創建時域對象的,在構造函數中,調用生成包含從所述枚舉值所解析的字符串的字符串的方法:

import java.util.ResourceBundle; 
import javax.faces.context.FacesContext; 

public class DomainObject { 
    private PrivateIndustry privateIndustry; 
    private String enumStringValue; 

    public void generateEnumStringValue() { 
     ResourceBundle rb= ResourceBundle.getBundle("labels",FacesContext.getCurrentInstance().getViewRoot().getLocale()); 
     this.enumStringValue = rb.getString("com.package.DomainObject.PrivateIndustry." + privateIndustry.name()); 
    } 
    public String getEnumStringValue() { 
     return emumStringValue; 
    } 

    public enum PrivateIndustry { 

     P("Private"), 

     N("Industry"), 

     K("Combined"); 
     private final String name; 

     PrivateIndustry(String name) { 
      this.name = name; 
     } 

     public String getName() { 
      return name; 
     }  
    } 
} 

,然後,在bean:

public String getEnumStringValue(DomainObject domainObject) { 

    return domainObject.getEnumStringValue(); 
} 

最後:

<p:column headerText="#{labels.header}" 
      filterBy="#{backingBean.getEnumStringValue(domainObject)}" 
      sortBy="#{backingBean.getEnumStringValue(domainObject)}"> 
    <h:outputText value="#{domainObject.privateIndustry}"/> 

</p:column>