2013-03-31 2 views
0

Я создал фильтр для столбца, содержащего значения String. Оно работает. Но такой же подход не работает . Когда я выбираю какую-то дату, он ничего не фильтрует, но когда я выбираю пустое значение в фильтре, он показывает все даты. Так что это работает, но что-то не так с датами :(столбец даты фильтрации фильтров

Существует код для строковых значений:

<rich:column filterValue="#{clientBean.confirmFilter}" 
       filterExpression="#{fn:containsIgnoreCase(client.conferm, 
clientBean.confirmFilter)}"> 
        <f:facet name="header"> 
         <h:panelGroup> 
          <h:outputText value="Filter " /> 
          <h:selectOneMenu value="#{clientBean.confirmFilter}"> 
           <f:selectItems value="#{clientBean.listConfirmFilter}" /> 
           <a4j:ajax render="table" execute="@this" event="change" /> 
          </h:selectOneMenu> 
         </h:panelGroup> 
        </f:facet> 
        <h:outputText value="#{clientBean.getConfirmValue(client.conferm)}" /> 
       </rich:column> 

Код для дат:

<rich:column filterValue="#{clientBean.dataOpenFilter}" 
       filterExpression="#{fn:containsIgnoreCase(client.dataOpen, 
clientBean.dataOpenFilter)}"> 
        <f:facet name="header"> 
         <h:panelGroup> 
          <a4j:outputPanel layout="block"> 
           <rich:calendar value="#{clientBean.dataOpenFilter}" locale="ru/RU" 
            popup="true" datePattern="dd/MM/yyyy" 
            showApplyButton="false" cellWidth="24px" cellHeight="22px" 
            disabled="false" > 
           <a4j:ajax render="table" execute="@this" event="change" /> 
           </rich:calendar> 
          </a4j:outputPanel> 
         </h:panelGroup> 
        </f:facet> 
        <h:outputText value="#{client.dataOpen}" locale="ru/RU" > 
         <f:convertDateTime pattern="dd/MM/yyyy" /> 
        </h:outputText> 
       </rich:column> 

И мой managedBean:

private String confirmFilter; 
    private List<SelectItem> listConfirmFilter; 
    private Date dataOpenFilter; 
    ... 

    public String getConfirmFilter() { 
     return confirmFilter; 
    } 

    public void setConfirmFilter(String confirmFilter) { 
     this.confirmFilter = confirmFilter; 
    } 

    public List<SelectItem> getListConfirmFilter() { 
     listConfirmFilter = new ArrayList<SelectItem>(); 
     listConfirmFilter.add(new SelectItem("","")); 
     listConfirmFilter.add(new SelectItem("N","Not confirmed")); 
     listConfirmFilter.add(new SelectItem("Y","Confirmed")); 
     return listConfirmFilter; 
    } 

    public Date getDataOpenFilter() { 
     return dataOpenFilter; 
    } 

    public void setDataOpenFilter(Date dataOpenFilter) { 
     this.dataOpenFilter = dataOpenFilter; 
    } 

Я разработал это:

public Filter<Client> getDateOpenFilterImpl() { 
      return new Filter<Client>() { 
       public boolean accept(Client client) { 
        Date dataOpenFilter = getDataOpenFilter(); 
        if (dataOpenFilter == null || 
            dataOpenFilter.compareTo((Date)client.getDataOpen())==0) { 
         return true; 
        } 
        return false; 
       } 
      }; 
    } 

<rich:column filter="#{clientBean.dateOpenFilterImpl}" ... 
+1

Вы пытаетесь фильтровать 'date' используя метод, который вы сделали для фильтрации' String' ? 'fn: containsIgnoreCase (client.dataOpen, clientBean.dataOpenFilter)' – dcernahoschi

+0

Спасибо за много. – Foontik

+0

Я положил комментарий как ответ, поэтому этот вопрос может иметь принятый ответ. Пожалуйста, примите это. Благодарю. – dcernahoschi

ответ

1

Кажется, вы пытаетесь фильтровать Date используя метод сделал для фильтрации String:

fn:containsIgnoreCase(client.dataOpen, clientBean.dataOpenFilter)

+0

Спасибо. Да ты прав. Я написал наверху, как решить проблему. – Foontik

Смежные вопросы