1

私のjsfページにあるデータテーブルにグローバルフィルターを実装しようとしています。入力テキスト フィルターは、次のコードで正常に動作します。

<p:inputText id="globalFilter" onkeyup="examTable.filter();" style="width:200px" />

しかし、SelectOneMenu コンポーネントで同じアプローチを試みてもうまくいきません。

私はこのコードを試しました:

<p:selectOneMenu id="state" value="#{examenListBean.stateOption}"onchange="examTable.filter();"> 

      <f:selectItems value="#{examenListBean.etatExamOptions}"/> 

</p:selectOneMenu>

しかし、役に立たない。

ここに私の p:datatable タグがあります:

 <p:dataTable id="tabexam"
              paginatorPosition="bottom"
              var="exam"
              value="#{examenListBean.listexam}"
              widgetVar="examTable"
              emptyMessage="Aucun résultat n'a été trouvé avec les critères donnés"
              filteredValue="#{examenListBean.filteredexams}"
              paginator="true"
              rows="30" 
              paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"  
              rowsPerPageTemplate="5,10,15,30"
              resizableColumns="true">
4

2 に答える 2

2

私は同じ問題を抱えていました.primefacesがそのようなことを許可していないようです. 私の最終目標は、「selectOneMenu」テーブルを列から移動してヘッダーに配置できるようにすることですが、現時点ではこれが私が行ったことです。

これは、primefaces がその構造にアクセスして、フィルターの準備を整えているように見える方法によるものです。

私がやったことは、id = 'globalFilter' で 'hidden' p:inputText フィールドを作成し、id を display:none にしたことです...

次に、2 つの検索フィールドを作成しました (1 つは selecOneMenu を使用し、もう 1 つは inputText フィールドのみを使用します)。次に、これらのタイプの onchange または onkeyup 関数を使用して、jQuery を使用して隠しファイルを選択した値に更新し、crpTable 機能を呼び出す JavaScript 関数を呼び出しました。

<script type="text/javascript">

        function doFilter1()
        {
            $("#globalFilter").val($("#globalFilter1").val());
            widgetVarTableId.filter();
        };
        function doFilter2()
        {
            $("#globalFilter").val($("#globalFilter2").val());
            widgetVarTableId.filter();
        };

</script>

<style>
   .myGlobalFilter {
      display:none;       
   }

</style>

私の f:facet name=Header の中に私が持っている

<p:inputText id="globalFilter" styleClass="myGlobalFilter"/>

<h:outputText value="filter one: "/>
<h:selectOneMenu id="globalFilter1" onchange="doFilter1();">
   <f:selectItems value="#{formBean.filterOptions}" />
</h:selectOneMenu>

<h:outputText value="filter two: "/>
<p:inputText id="globalFilter2" onkeyup="doFilter2();">

これは期待どおりに機能します..ただし、primefaces .filter()- を使用することの短所は、「exact」「startsWith」などに変更できないことです。PF ソース コードを変更しなくても、常に「含む」ことになります。

お役に立てれば!

于 2014-02-21T08:06:19.660 に答える
2

サーバー側でフィルタリングしてみてください:

<p:selectOneMenu id="state" value="#{examenListBean.stateOption}"> 
            <f:selectItems value="#{examenListBean.etatExamOptions}"/> 
            <p:ajax event="change" process="@this" listener="#{myBean.filteringMethod}" update=":absPath:tabexam"/>
</p:selectOneMenu>

JavaScript メソッドがどのように見えるかわからない場合は、<p:remoteCommand>そこでテーブルを使用して更新してみてください。

于 2013-10-24T13:27:05.163 に答える