icefaces ace datatable: поле фильтра: как сделать фильтрацию выражения на основе даты

Я использую icefaces 3.2. Я хочу знать, как сделать фильтр ace: datatable filter на основе диапазона значений, введенного в поле фильтра. например, для столбца цены таблицы данных, который имеет двойное значение, я хочу ввести диапазон в поле фильтра, который похож на «> 1000», и фильтр должен его отфильтровать.


person ZEE    schedule 20.01.2013    source источник


Ответы (1)


Хорошо, я вижу, что ваша тема и ваш вопрос совершенно разные. Но что касается фильтрации «Выражения на основе даты», Icefaces не поддерживает фильтрацию, кроме формата String. Итак, вот обходной путь, который я сделал, чтобы сделать это.

В вашей разметке .xhtml:

  1. Добавьте атрибут constantRefilter= "true" для соответствующей таблицы данных ace.
  2. Для столбца даты:

    <ace:column id="scanDateColumn" filterBy="#{row.scanDate}"
    filterValue="#{mainReport.scanDateFilter}" filterMatchMode="exact">
    <f:facet name="header">
    Scan Date
    <ace:dateTimeEntry id="scanDate" timeZone="#{mainReport.timeZone}"
    value="#{mainReport.scanCalenderDate}" pattern="MM/dd/yyyy" renderAsPopup="true>
    <ace:ajax event="dateSelect" listener="#{mainReport.dateSelected}"/>
    </ace:dateTimeEntry>
    </f:facet>
    <h:outputText value="#{row.scanDate}" />
    </ace:column>
    
  3. Итак, после того, как вы это сделаете, у вас должны быть соответствующие значения bean-компонентов, а также соответствующие геттеры и сеттеры. теперь в Bean: ваш слушатель выглядит так:

    public void dateSelected(DateSelectEvent e) throws ParseException {
    
           setScanDateFilter(dateFormatForFilter(e.getDate()));
    }
    

Хорошо, вот, dateFormatForFilter(Date d), это метод, который преобразует дату в строку в настраиваемых форматах. и причина в том, что значение фильтра, которое вы видите в столбце, принимает только форматы String, а значение записи данных ace - формат даты. Таким образом, все, что выбрано в этом поле даты, будет установлено в filterValue и, следовательно, будет отфильтровано по выбранному значению.

Если вы не хотите, чтобы это поле фильтра отображалось автоматически, под полем dataEntry добавьте атрибут для вышеуказанного столбца как: filterStyle="display:none", и это позаботится об этом. Итак, теперь вы можете увидеть что-то вроде этого:

Я мог бы прикрепить полученный снимок экрана, но stackoverflow не позволяет мне это сделать. Итак, дайте мне знать, имеет ли это смысл.

person PavanSandeep    schedule 31.01.2013
comment
Большое спасибо, я понял этот пример. На самом деле я искал способ передать выражение даты в поле фильтра, например › 01/01/2013, что означает показать мне все результаты больше, чем 01/янв/2013, форумы Icefaces сказали мне, что их следующий выпуск Icefaces 3.3 будет иметь это функциональность. Так что на данный момент я обновляю свой модал с выбранным выражением даты. - person ZEE; 14.02.2013