文字列値を含む列のフィルターを作成しました。できます。しかし、同じアプローチは日付には機能しません。日付を選択すると何もフィルタリングされませんが、フィルターで空の値を選択するとすべての日付が表示されます。それでうまくいきますが、日付に何か問題があります:(
文字列値のコードがあります:
<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>
そして私のマネージドBean:
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}" ...