2012-09-29 134 views
2

primefaces庫的checkbox datatable不適用於我,我試着做與primefaces展示相同的代碼,但當我檢查一些行,然後點擊視圖按鈕selectedCars []包含0行: 這裏是我的XHTML頁面:checkbox datatable primefaces does not working

<?xml version="1.0" encoding="UTF-8"?> 
<!-- 
To change this template, choose Tools | Templates 
and open the template in the editor. 
--> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:p="http://primefaces.org/ui" 
     xmlns:f="http://java.sun.com/jsf/core"> 
    <h:head> 
     <title>TODO supply a title</title> 
    </h:head> 
    <h:body> 
     <h:form id="form"> 
      <p:dataTable id="multiCars" var="car" value="#{fortest.mediumCarsModel}" paginator="true" rows="10" 
         selection="#{fortest.selectedCars}"> 

       <f:facet name="header"> 
        Checkbox Based Selection 
       </f:facet> 

       <p:column selectionMode="multiple" style="width:18px" /> 

       <p:column headerText="id"> 
        #{car.id} 
       </p:column> 

       <p:column headerText="date envoi"> 
        #{car.dateEnvoi} 
       </p:column> 

       <p:column headerText="decision" > 
        #{car.decision} 
       </p:column> 

       <f:facet name="footer"> 
        <p:commandButton id="multiViewButton" value="View" icon="ui-icon-search" 
            update=":form:displayMulti" oncomplete="multiCarDialog.show()"/> 
       </f:facet> 
      </p:dataTable> 

      <p:dialog id="multiDialog" header="Car Detail" widgetVar="multiCarDialog" 
         height="300" showEffect="fade" hideEffect="explode"> 

       <p:dataList id="displayMulti" 
          value="#{fortest.selectedCars}" var="selectedCar"> 
        id : #{selectedCar.id}, dateEnvoi #{selectedCar.dateEnvoi} 
       </p:dataList> 

      </p:dialog> 
     </h:form> 
    </h:body> 
</html> 

,這裏是我的託管bean:

@ManagedBean 
@SessionScoped 
public class fortest implements Serializable { 

    private Commande[] selectedCars; 
    private dortestDataModel mediumCarsModel; 
    utilisateursHelper uh; 
    /** 
    * Creates a new instance of fortest 
    */ 
    public fortest() { 
     uh = new utilisateursHelper(); 
     mediumCarsModel = new dortestDataModel(uh.getAllCommandes()); 

    } 

    public void setSelectedCars(Commande[] selectedCars) { 
     System.out.println("alors je suis donc la size : "+selectedCars.length); 
     this.selectedCars = selectedCars; 
    } 

    public Commande[] getSelectedCars() { 
     return selectedCars; 
    } 

    public dortestDataModel getMediumCarsModel() { 
     return mediumCarsModel; 
    } 

} 

,這裏是我的數據模型:

public class dortestDataModel extends ListDataModel<Commande> implements SelectableDataModel<Commande> {  

    utilisateursHelper uh; 

    public dortestDataModel() { 
    } 

    public dortestDataModel(List<Commande> data) { 
     super(data); 
     uh = new utilisateursHelper(); 
    } 

    @Override 
    public Commande getRowData(String rowKey) { 
     //In a real app, a more efficient way like a query by rowKey should be implemented to deal with huge data 


     List<Commande> cars = (List<Commande>) uh.getAllCommandes(); 

     for(Commande car : cars) { 
      if(car.getId().equals(rowKey)) 
       return car; 
     } 

     return null; 
    } 

    @Override 
    public Object getRowKey(Commande car) { 
     return car.getId(); 
    } 
} 

你有什麼想法,謝謝你提前

回答

4

你忘了rowCheckListener連接到您的數據表這樣

<p:ajax event="rowSelectCheckbox" listener="#{forTest.check}" /> 

下面的代碼爲我工作。我能夠在對話框中看到ID和決定。

XHTML: 我不力實現selectableDataModel,我只是用rowKey的數據表屬性,你可以使用,以及

<h:form id="form"> 
    <p:dataTable id="multiCars" var="car" value="#{forTest.carList}" paginator="true" rows="10" 
        rowKey ="#{car.id}" selection="#{forTest.selectedCars}" > 
     <p:ajax event="rowSelectCheckbox" listener="#{forTest.check}" /> 
     <f:facet name="header"> 
      Checkbox Based Selection 
     </f:facet> 

     <p:column selectionMode="multiple" style="width:18px" /> 

     <p:column headerText="id"> 
      #{car.id} 
     </p:column> 

      <p:column headerText="decision" > 
      #{car.decision} 
     </p:column> 

     <f:facet name="footer"> 
      <p:commandButton id="multiViewButton" value="View" icon="ui-icon-search" 
          update=":form:displayMulti" oncomplete="multiCarDialog.show()"/> 
     </f:facet> 
    </p:dataTable> 

    <p:dialog id="multiDialog" header="Car Detail" widgetVar="multiCarDialog" 
       height="300" showEffect="fade" hideEffect="explode"> 

     <p:dataList id="displayMulti" 
        value="#{forTest.selectedCars}" var="selectedCar"> 
      id : #{selectedCar.id}, dateEnvoi #{selectedCar.decision} 
     </p:dataList> 

    </p:dialog> 
</h:form> 

ManagedBean

package managedbeans; 
import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.List; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 
import javax.jws.Oneway; 

import org.primefaces.event.SelectEvent; 

import beans.Car; 



    @ManagedBean(name="forTest") 
    @SessionScoped 
    public class forTest implements Serializable { 
     private List<Car> carList = new ArrayList<Car>(); 
     private Car selectedCars[]; 

     public Car[] getSelectedCars() { 
      return selectedCars; 
     } 

     public void setSelectedCars(Car selectedCars[]) { 
      this.selectedCars = selectedCars; 
     } 

     public List<Car> getCarList() { 
      if(carList.size()==0) { 
       setCarList(); 
      } 
      return carList; 
     } 

     public void setCarList() { 
      this.carList.add(new Car(1, "car1")); 
      this.carList.add(new Car(2, "car2")); 
      this.carList.add(new Car(3, "car3")); 
     } 
     public void check(SelectEvent event) { 
      System.out.println("in check"); 
     } 


    } 
0

刪除這個:

<p:dialog id="multiDialog" header="Car Detail" widgetVar="multiCarDialog" 
      height="300" showEffect="fade" hideEffect="explode"> 

    <p:dataList id="displayMulti" 
       value="#{forTest.selectedCars}" var="selectedCar"> 
     id : #{selectedCar.id}, dateEnvoi #{selectedCar.decision} 
    </p:dataList> 

</p:dialog>