2016-04-18 61 views
1

我正在使用數據表和動態列<p:columns/>,我在每列上都有一個filterBy。但是我的表的某些列有一個格式化的值(例如:0和1到db,顯示爲「否」和「是」),所以filterBy使用了db值。我使用轉換器來格式化我的價值。 編輯:我用TMX鍵以不同的語言顯示值。這是我的問題的一部分。Primefaces數據表filterBy與顯示的線條

這裏我的HTML

<p:dataTable 
         id="employeeBeanPageItems" 
         styleClass="table" 
         value="#{staffListController.model.staffSearch}" 
         rows="15" 
         sortBy="#{_item.stfFullName}" 
         var="_item" 
         draggableColumns="true" 
         widgetVar="itemsTable" 
         selectionMode="single" 
         rowKey="#{_item.stfId}" 
         resizableColumns="true" 
         scrollable="false" 
         tableStyle="width:auto" 
         emptyMessage="#{msg['error.no-result']}" 

         paginator="true" 
         paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
         rowsPerPageTemplate="10,15,20,50"> 

         <p:ajax event="rowSelect" listener="#{staffListController.onRowSelect}" />  
         <p:ajax event="colReorder" listener="#{staffListController.onColumnReorder}" update=":search:menuColonne"/>    
         <p:columns filterMatchMode="contains" headerText="#{msg[column.header]}" value="#{staffListController.columns}" var="column" columnIndexVar="colIndex" sortBy="#{_item[column.property]}" filterBy="#{_item[column.property]}"> 
          <h:outputText value="#{_item[column.property]}" converter="StaffListConverter"/>    
         </p:columns> 
        </p:dataTable> 

這裏我轉換

@Override 
public String getAsString(FacesContext context, UIComponent component, Object value) { 
    // TODO Auto-generated method stub 
     Label label = new Label(value.toString()); 

    if (value.equals("1") || value.equals("Y")) 
    { 
     label.setLabel(getRessourceBundle().getString("common.yes")); 
    } 
    else if (value.equals("0") || value.equals("N")) 
    { 
     label.setLabel(getRessourceBundle().getString("common.no")); 
    } 
    else if (value.equals("EMPLOYEE")) 
    { 
     label.setLabel(getRessourceBundle().getString("staff.employee")); 
    } 
    else if (value.equals("COMPDEV")) 
    { 
     label.setLabel(getRessourceBundle().getString("staff.cd")); 
    } 
    else if (value.equals("MAN")) 
    { 
     label.setLabel(getRessourceBundle().getString("MAN")); 
    } 
    else if (value.equals("WOMAN")) 
    { 
     label.setLabel(getRessourceBundle().getString("WOMAN")); 
    } 
    else if (value.equals("UNKNOWN")) 
    { 
     label.setLabel(getRessourceBundle().getString("UNKNOWN")); 
    } 

    return label.getLabel(); 
} 

    /** 
    * Label is to create an object with a String 
    */ 
    static public class Label implements Serializable { 

     private static final long serialVersionUID = 1L; 
     @Getter @Setter private String label; 

     /** 
     * Public constructor of Label 
     * @param String label 
     * 
     */ 
     public Label(String label) { 
      this.label = label; 

     } 

     /** 
     * Empty constructor 
     * 
     */ 
     public Label() {} 

     @Override 
     public String toString() { 
      return label; 
     } 
    } 

} 

也許我應該用一種不同的方式來格式化數據,但我不知道怎麼樣。目標留在允許過濾器使用。

地址: 我試圖通過第一解說用下面的代碼在我的模型

public String getStfResourceLaptopFormat() { 
    if (stfResourceLaptop != null) 
    { 
     if (stfResourceLaptop.equals("1")) 
     { 
      return "common.yes"; 
     } 
     else if(stfResourceLaptop.equals("0")) 
     { 
      return "common.no"; 
     } 
     else return null; 
    } 
    else 
    { 
     return null; 
    } 

}給出的解決方案

的問題是,我必須返回一個TMK鍵,然後filterBy使用關鍵:/

<p:columns filterMatchMode="contains" headerText="#{msg[column.header]}" value="#{staffListController.columns}" var="column" columnIndexVar="colIndex" sortBy="#{_item[column.property]}" filterBy="#{_item[column.property]}"> 
          <h:outputText value="#{msg[_item[column.property]]}" />    
         </p:columns> 

回答

0

轉換器只轉換顯示的值getAsString方法不改變對象。因此,您必須在創建staffListController.model.staffSearch列表時更改該值。當你從數據庫中獲取值時,它自己在列表中

+0

謝謝你的回答。你是對的。我試過)類似的東西用下面的例子 公共字符串getStfResourceLaptopFormat({ \t如果(stfResourceLaptop!= NULL) \t { \t \t如果(stfResourceLaptop.equals( 「1」)) \t \t { \t \t \t返回「common.yes」; \t \t} \t \t否則如果(stfResourceLaptop.equals( 「0」)) \t \t { \t \t \t返回 「common.no」; \t \t} \t \t else else null; \t} \t其他 \t { \t \t返回NULL; \t} \t \t } 問題是我必須返回一個TMX鍵,然後用TMX鍵追加搜索 –