2012-06-01 23 views
6

tengo una columna en una tabla de datos y quiero añadir un filtro con este código:PF filtrado de una columna Datatable que contiene una fecha

<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> 

fecha se introduce en un formulario en este formato:

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

El filtro funciona para el id pero no para la fecha. ¿Cuál es la razón de esto y cómo puedo hacer que el filtro funcione en este caso?

Respuesta

11

Todavía no existe un mecanismo de filtro de fecha de preparación en las superficies de inicio, pero existe la posibilidad de filtrar por fecha utilizando un filtro personalizado. Usted tendrá que definir una faceta de cabecera para sus llamadas de columna y el uso de Ajax para el filtrado de "manual", pero funciona:

<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

gracias kostja por la aclaración. – lamostreta

+0

De nada. – kostja

+0

qué es ctrlr.filterDates() – WiXXeY

7

Para la solución más simple sólo tiene que añadir un marcador de posición para una fecha con String como tipo de datos para filterBy uso de componentes.

Pasos:

crear una nueva propiedad transitoria en la clase del modelo.

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

Cree la lógica a continuación antes de devolver el modelo de datos.

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; 
} 

Actualice su XHTML para usar la propiedad dateForFilter.

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

Nota: Solo puede usar esto si no está utilizando la fecha para actualizar el contenido de la clase de modelo.

HTH.

+0

gracias por la respuesta. Voy a intentar eso. – lamostreta

Cuestiones relacionadas