1

並べ替える検索フィールドとcommandLinkを備えたデータテーブルがあります。並べ替えをトリガーするために使用するcommandLinkは、列ヘッダーではなく、datatableのヘッダーにあります。ページをロードし、commandLinkのみを使用してすべてを並べ替えると、問題なく機能します。テーブルは2つの順序で並べ替えられ、ページに結果が表示されます。globalFilterで何かを検索すると、問題が発生します。それも機能しますが、その後はテーブルを並べ替えることができません。globalFilterのinputTextをクリアし、テーブルを並べ替えることができません。要約すると、検索フィールドを使用しない場合にのみ並べ替えの結果が表示されます。並べ替え操作は機能しますが、データテーブルの更新を要求しません。以下にコードを入れます。多分誰かがそれを解決する方法を知っています。

<ui:composition>
    <p:panel header="Moje pomiary" footer="#{msgs.footer}" id="myMeasurement">

        <h:form id="form" prependId="false">
<p:dataTable var="m" value="#{myMeasurementTable.measurement}" id="measureList" editable="true"              
             widgetVar="mTable"   
             emptyMessage="No files found with given criteria" filteredValue="#{myMeasurementTable.filteredMeasurement}" >

<f:facet name="header">  
        Sortowanie według: <p:commandLink id="sortByName" actionListener="#{myMeasurementTable.sortByName}" update="measureList">   
    <h:outputText value="nazwa pliku" />  
</p:commandLink>  
        |<h:commandLink action="#{myMeasurementTable.sortByArchivisationDate}"> data archiwizacji </h:commandLink> 
        |<h:commandLink action="#{myMeasurementTable.sortByMeasureDate}"> data badania </h:commandLink> 
        <p:outputPanel styleClass="searchPanel">  
            <h:outputText value="Szukaj: " />  
            <p:inputText styleClass="globalFilter" id="globalFilter" onkeyup="mTable.filter()" style="width:150px" />  
        </p:outputPanel>  
    </f:facet>  

    <p:column headerText="Informacje pomiarowe" style="width:125px" filterStyle="display:none" filterBy="#{m.fileName} #{m.measureDate} #{m.place} #{m.archivisationDate}"
    filterMatchMode="contains" >
    <p:separator styleClass="separatorColumn"/> 
        Nazwa pliku: <h:outputText value="#{m.fileName}" /><br /> 
                Data badania: <h:outputText value="#{m.measureDate}" /><br /> 
                Data archiwzacji: <h:outputText value="#{m.archivisationDate}" /><br /> 
                Miejscowość: <h:outputText value="#{m.place}"/> <br />
                Współrzędne GPS:           
    </p:column>

    <p:column headerText="Wykresy">  
       <img src="/tmp/21/myfile.xls/myfile.xls_Parametr x.png" width="150"/>  
    </p:column> </p:dataTable></h:form></p:panel></ui:composition>

と私の豆の一部

@ManagedBean(name = "myMeasurementTable")
@ViewScoped
public class myMeasurementTable implements Serializable{


    private static final long serialVersionUID = -9193902657201234669L;
    private List<Measurement> measurement;
    private List<Measurement> filteredMeasurement;
    private boolean sortAscending = true;

    public myMeasurementTable() {
        measurement = new ArrayList<Measurement>();
        fillTable(measurement);
    }

    public String sortByName() {
        System.out.println("naciskam sortowanie");
        if (sortAscending) {
            Collections.sort(measurement, new Comparator<Measurement>() {

                @Override
                public int compare(Measurement m1, Measurement m2) {

                    return m1.getFileName().compareTo(m2.getFileName());

                }
            });
            sortAscending = false;
        } else {
            Collections.sort(measurement, new Comparator<Measurement>() {

                @Override
                public int compare(Measurement m1, Measurement m2) {
                    System.out.println(m2.getFileName());
                    return m2.getFileName().compareTo(m1.getFileName());

                }
            });
            sortAscending = true;
        }
        return null;
    }
4

1 に答える 1

1

OK、primefaces フォーラムで解決策を見つけました。それは簡単です。commandButton に oncomplete="mTable.filter()" を追加しただけで、すべてが思い通りに機能します。

于 2012-12-15T13:10:30.757 に答える