-1

比較的単純な DataTable を作成し、ページネーション機能も使用してフィルター機能を使用しようとしました。

Primefaces ショーケースを参照して、クラスの各フィールドの列を作成しましたCustomer

これは私の「コントローラー」ビーンです:

@SessionScoped
@Named

public class CustomerListController implements Serializable{

     public static final long serialVersionUID = //UID;

     private List<Customer> filteredCustomers;

     private List<Customer> allCustomers;

     public CustomerListController(){
         //some Class that generates a list of sufficiently many 
         //dummy customers on instantiation
         this.allCustomers = new CustomerListProducer().getCustomers();
     }

     public List<Customer> getFilteredCustomers{
         return this.filteredCustomers;
     }

     public void setFilteredCustomers(List<Customers> list){
         this.filteredCustomers = list;
     }

     public List<Customer> getAllCustomers(){
         return this.allCustomers;
     }
}

これをレンダリングするには、次の dataTable を使用します。

<p:dataTable paginator="true" rows="18" scrollRows="15" scrollable="true" 
   scrollHeight="500" var="customer" value="#{customerListController.allCustomers}" 
   scrollable="true" id="customerTable" 
   filteredValue="#{customerListController.filteredCustomers}" widgetVar="table">

   <f:facet name="header">
      <p:outputPanel>
        <h:outputText value="Search all fields:" />
        <h:inputText id="globalFilter" onkeyup="table.filter()" />
      </p:outputPanel>
   </f:facet>

   <p:Column id="nameColumn" filterBy="name" sortBy="name"
      headerText="Customer" filterMatchMode="contains">
      <h:outputText value="#{customer.name}" />
   </p:Column>

   <!-- Some more columns in the exactly same 
    manner as this changes only in Customer attribute-->

</p:dataTable>

特定のフィルター フィールドで任意のキーを押すと、テーブルはすべての行を失い、フィールドをクリアしても何も表示されません。

ページを更新すると、予想される行数とページ数が得られます。

ご要望に応じて修正を加えようと思います。

編集:

MavenとともにインストールされたPrimefacesバージョン4.0.0を使用しています。
FF の下でコンソールを掘り下げていたところ、次
のことがわかりました。更新されたテーブルのノード エントリを保存して、応答 XML が空です。JavaScript エラーはスローされず、「テーブル データ」とともに送信されるビューステート ID はキーストロークごとに変化します。

4

2 に答える 2

0

コードを次のように置き換えます

public CustomerListController(){
     //some Class that generates a list of sufficiently many 
     //dummy customers on instantiation
     this.allCustomers = new CustomerListProducer().getCustomers();
     this.setFilteredCustomers(this.getAllCustomers());
 }

filterAttribute に値が指定されていないため、フィルター処理を行うと空の dataTable が表示されます。

お役に立てれば

于 2013-10-16T13:01:44.587 に答える