Я использую icefaces 3.2. Я хочу знать, как сделать фильтр ace: datatable filter на основе диапазона значений, введенного в поле фильтра. например, для столбца цены таблицы данных, который имеет двойное значение, я хочу ввести диапазон в поле фильтра, который похож на «> 1000», и фильтр должен его отфильтровать.
icefaces ace datatable: поле фильтра: как сделать фильтрацию выражения на основе даты
Ответы (1)
Хорошо, я вижу, что ваша тема и ваш вопрос совершенно разные. Но что касается фильтрации «Выражения на основе даты», Icefaces не поддерживает фильтрацию, кроме формата String. Итак, вот обходной путь, который я сделал, чтобы сделать это.
В вашей разметке .xhtml:
- Добавьте атрибут
constantRefilter= "true"
для соответствующей таблицы данных ace. Для столбца даты:
<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>
Итак, после того, как вы это сделаете, у вас должны быть соответствующие значения bean-компонентов, а также соответствующие геттеры и сеттеры. теперь в Bean: ваш слушатель выглядит так:
public void dateSelected(DateSelectEvent e) throws ParseException { setScanDateFilter(dateFormatForFilter(e.getDate())); }
Хорошо, вот, dateFormatForFilter(Date d)
, это метод, который преобразует дату в строку в настраиваемых форматах. и причина в том, что значение фильтра, которое вы видите в столбце, принимает только форматы String, а значение записи данных ace - формат даты. Таким образом, все, что выбрано в этом поле даты, будет установлено в filterValue и, следовательно, будет отфильтровано по выбранному значению.
Если вы не хотите, чтобы это поле фильтра отображалось автоматически, под полем dataEntry добавьте атрибут для вышеуказанного столбца как: filterStyle="display:none"
, и это позаботится об этом. Итак, теперь вы можете увидеть что-то вроде этого:
Я мог бы прикрепить полученный снимок экрана, но stackoverflow не позволяет мне это сделать. Итак, дайте мне знать, имеет ли это смысл.