0

文字列値を含む列のフィルターを作成しました。できます。しかし、同じアプローチは日付には機能しません。日付を選択すると何もフィルタリングされませんが、フィルターで空の値を選択するとすべての日付が表示されます。それでうまくいきますが、日付に何か問題があります:(

文字列値のコードがあります:

    <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}" ...
4

1 に答える 1

1

Dateでフィルタリングするために作成されたメソッドを使用してフィルタリングしようとしているようですString

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

于 2013-03-31T18:48:41.340 に答える