2016-04-28 9 views
0

データテーブルを通じて表示されるクエリの結果セットをフィルタ処理します。行の選択、列ヘッダーの行のソート、データテーブルのページ区切りの機能の操作は問題ありません。私は、データテーブルにfunctionnalityをフィルタリングprimefacesを追加すると、私はその後DataModelは、プライムフェイスフィルタを使用してorg.primefaces.model.SelectableDataModel例外を実装する必要があります

javax.faces.FacesExceptionに実行します。選択が有効になっているときのDataModelは org.primefaces.model.SelectableDataModelを実装する必要があります。

オブジェクトエンティティ:

@Entity 
@Table(name="Customer", 
     uniqueConstraints={@UniqueConstraint(columnNames={"ID"})}) 

public class Customer { 
    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name="ID", nullable=false, unique=true, length=11) 
    private Integer id; 

    @Column(name="LASTNAME", length=40, nullable=false) 
    private String lastName; 

    @Column(name="FIRSTNAME", length=30, nullable=true) 
    private String firstName; 
.... 
} 

マネージドBean:

@ManagedBean(name = "customerController") 
@ViewScoped 

public class CustomerController implements Serializable { 

    private static final long serialVersionUID = 1L; 
    private Customer selectedCustomer = new Customer(); 
    private List<Customer> customers = new ArrayList<Customer>(); 
    private String message; 

    public CustomerController() { 
    } 

    @PostConstruct 
    void init() {   
     CustomerDAO custDAO = new CustomerDAO(); 
     customers = custDAO.getAllCustomers(); 

     // select first row 
     if (customers != null) selectedCustomer=customers.get(0); 
    } 

    public void onRowSelect(SelectEvent event) { 
     message = ""; 
    } 

    public void onRowUnselect(UnselectEvent event) { 
     message = ""; 
    } 

    // getters and setters 
    ... 
} 

にfaceletは:

<ui:define name="contentPart1" >    
    <h:form id="contentPart1Form"> 
     <p:dataTable id="singleSelection" var="customer" value="#{customerController.customers}" rowKey="#{customer.id}" 
      selection="#{customerController.selectedCustomer}" selectionMode="single" paginator="true" rows="10"> 
      <p:ajax event="rowSelect" listener="#{customerController.onRowSelect}" /> 

      <p:column headerText="#{msg['customerCRUD.labelIdentifier']}" style="width:15%;"> 
       <h:outputText value="#{customer.id}" readonly="#{facesContext.currentPhaseId.ordinal eq 6}"/> 
      </p:column> 
      <p:column headerText="#{msg['customerCRUD.labelFirstName']}" sortBy="#{customer.firstName}" style="width:30%;"> 
       <h:outputText value="#{customer.firstName}" /> 
      </p:column> 
      <p:column headerText="#{msg['customerCRUD.labelLastName']}" filterBy="#{customer.lastName}" filterMatchMode="contains" 
       sortBy="#{customer.lastName}"> 
       <h:outputText value="#{customer.lastName}" /> 
      </p:column> 

      <f:facet name="footer"> 
       <h:outputText value=" "/> 
      </f:facet>     
     </p:dataTable>    
    </h:form> 
</ui:define> 

答えて

1

は、調査の時間後、私は最終的に私がされたオブジェクトの実体を実現しましたフィルターを直列化できませんでした。 解像度は、オブジェクトエンティティをシリアル化クラスから継承することでした。

@Entity 
@Table(name="Customer", 
     uniqueConstraints={@UniqueConstraint(columnNames={"ID"})}) 

public class Customer implements Serializable{ 

/** 
* 
*/ 
private static final long serialVersionUID = 1L;{ 
    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name="ID", nullable=false, unique=true, length=11) 
    private Integer id; 

    @Column(name="LASTNAME", length=40, nullable=false) 
    private String lastName; 

    @Column(name="FIRSTNAME", length=30, nullable=true) 
    private String firstName; 
.... 
} 
+1

シリアライズ可能なインターフェイスであるため、継承しませんが実装します。 –

関連する問題