2012-06-01 4 views
6

ich eine Spalte in einer Datentabelle und ich möchte einen Filter mit diesem Code hinzuzufügen:PF-Filterung eine Datentabelle Spalte, die ein Datum enthält

<p:dataTable id="aDataTable" var="aVariable" value="#{aView.values}" paginator="true" rows="10" selectionMode="single" selection="#{aView.selection}" onRowSelectUpdate="aForm"> 
       <f:facet name="header"> 
        A List 
       </f:facet> 
       <p:column sortBy="#{aVariable.id}" filterBy="#{aVariable.id}" filterEvent="change"> 
        <f:facet name="header"> 
         <h:outputText value="No"/> 
        </f:facet> 
        <h:outputText value="#{aVariable.id}"/> 
       </p:column> 
       <p:column sortBy="#{aVariable.date}" filterBy="#{aVariable.date}" filterEvent="change"> 
        <f:facet name="header"> 
         <h:outputText value="Date"/> 
        </f:facet> 
</p:dataTable> 

Datum in diesem Format in einer Form eingegeben wird:

<h:outputText value="Date: *"/> 
<p:calendar pattern="dd/MM/yyyy" value="#{aView.value.date}"/> 

Filter funktioniert für die ID, aber nicht für das Datum. Was ist der Grund dafür und wie kann ich Filter in diesem Fall machen?

Antwort

11

Es gibt noch keinen vorgefertigten Datumsfiltermechanismus in den Hauptoberflächen, aber es gibt eine Möglichkeit, nach einem benutzerdefinierten Filter nach Datum zu filtern. Sie erhalten eine Kopf Facette für Ihre Spalte und Verwendung Ajax-Aufrufe für „manuell“ Filtern definieren müssen, aber es funktioniert:

<column> 
    <f:facet name="header">DateRange 
    <div> 
     <p:calendar id="from" value="#{bean.from}" styleClass="calendarFilter"> 
     <p:ajax event="dateSelect" listener="#{ctrlr.filterDates()}" update="dataTableId"/> 
     </p:calendar> 
     <p:calendar id="to" value="#{bean.to}" styleClass="calendarFilter"> 
     <p:ajax event="dateSelect" listener="#{ctrlr.filterDates()}" update="dataTableId"/> 
     </p:calendar> 
    </div> 
    </f:facet> 

...

+0

danke kostja für die Klarstellung. – lamostreta

+0

Gern geschehen. – kostja

+0

Was ist ctrlr.filterDates() – WiXXeY

7

Für einfachere Lösung, die Sie nur einen Platzhalter hinzufügen müssen für ein Datum mit String als Datentyp für filterBy Komponentenverwendung.

Schritte:

eine neue vorübergehende Eigenschaft in der Modellklasse erstellen.

@Transient 
private String dateForFilter; 
public String getDateForFilter() { 
return dateForFilter; 
} 
public void setDateForFilter(String dateForFilter) { 
this.dateForFilter = dateForFilter; 
} 

Erstellen Sie die folgende Logik, bevor Sie das Datenmodell zurückgeben.

public List<Item> getDataModel() { 
    List<Item> lstItem = serviceClass.loadItem(userid); 
    for (Item item : lstItem) { 
     DateFormat dateFormat = null; 
     Date date = item.getDate; 
     dateFormat = new SimpleDateFormat("MM/dd/yyyy kk:mm"); 
     item.setDateForFilter(dateFormat.format(date)); 
    } 

    return lstItem; 
} 

Aktualisieren Sie Ihr XHTML, um die Eigenschaft dateForFilter zu verwenden.

<p:column filterBy="#{item.dateForFilter}"> 
    <f:facet name="header"> 
    Transaction Date 
    </f:facet> 
    <h:outputText value="#{item.dateForFilter}" /> 
</p:column> 

Hinweis: Sie können dies nur verwenden, wenn Sie das Datum nicht zum Aktualisieren des Inhalts der Modellklasse verwenden.

HTH.

+0

Danke für die Antwort. Ich werde es versuchen. – lamostreta

Verwandte Themen