2012-10-09 31 views
0

我需要RadioCheckbox一個DataTable隨後找到了鏈接數據表與RadioCheckbox空白

FacesException: DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled

我所需要的,但在運行時,頁面是空白的,並沒有給出例外。

無論如何,我會發布我的代碼。

我的XHTML:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
xmlns:ui="http://java.sun.com/jsf/facelets" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:p="http://primefaces.org/ui"> 

<h:head> 
    <title>Primefaces 3.1</title> 
</h:head> 

<h:body> 
<h:form id="form"> 
    <p:dataTable value="#{tableBean.cars}" var="var" paginator="true" rows="10" 
    selection="#{tableBean.car}" 
    selectionMode="single"> 
     <p:column> 
     <f:facet name="header"> 
     <h:outputText styleClass="outputText" value="Model"></h:outputText> 
     </f:facet> 
     <h:outputText styleClass="outputText" value="#{var.model}"></h:outputText> 
     </p:column> 
     <p:column> 
    <f:facet name="header"> 
     <h:outputText styleClass="outputText" value="Color"></h:outputText> 
    </f:facet> 
     <h:outputText styleClass="outputText" value="#{var.randomColor}"></h:outputText> 
     </p:column> 
    </p:dataTable> 
    </h:form> 
</h:body> 
</html> 

豆:

@ManagedBean 
@SessionScoped 
public class TableBean implements Serializable{ 

    private static final long serialVersionUID = 1L; 

    private List<Car> cars; 
    private Car car; 
    private CarDataModel carsModel; 

    public TableBean() { 
     cars = new ArrayList<Car>();  
     Car car1 = new Car(); 
     car1.setModel("BMW"); 
     car1.setRandomColor("Black"); 
     cars.add(car1); 
     Car car2 = new Car();  
     car2.setModel("Audi"); 
     car2.setRandomColor("White"); 
     cars.add(car2);  

     carsModel = new CarDataModel(cars); 
    } 

    public List<Car> getCars() { 
     return cars; 
    } 

    public String onRowSelect(){ 
     System.out.println("Row Click!!!"); 
     return "otherpage";//Does this nav works???if not how??? 
    } 

    public Car getCar() { 
     return car; 
    }  

    public CarDataModel getCarsModel() { 
    return carsModel; 
    } 


    public void setCarsModel(CarDataModel carsModel) { 
    this.carsModel = carsModel; 
    } 

CarDataModel:

public class CarDataModel extends ListDataModel<Car> implements SelectableDataModel<Car>, Serializable { 

    private static final long serialVersionUID = 1L; 

    public CarDataModel(List<Car> data) { 
     super(data); 
    } 

    @Override 
    public Car getRowData(String rowKey) { 
     @SuppressWarnings("unchecked") 
     List<Car> cars = (List<Car>) getWrappedData(); 

     for(Car car : cars) { 
      if(car.getModel().equals(rowKey)) 
       return car; 
     } 

     return null; 
    } 

    @Override 
    public Object getRowKey(Car car) { 
     return car.getModel(); 
    } 

我不知道是什麼都可以。

謝謝!

+0

已經改變失敗。 – Deb

+0

這是我討厭的facelets和jsf。空白頁是最差的。沒有跡象表明什麼是錯的 –

回答

0

我認爲這個問題是在這裏:

public TableBean() { 
     cars = new ArrayList<Car>();  
     Car car1 = new Car(); 
     car1.setModel("BMW"); 
     car1.setRandomColor("Black"); 
     cars.add(car1); 
     Car car2 = new Car();  
     car2.setModel("Audi"); 
     car2.setRandomColor("White"); 
     cars.add(car2);  

     carsModel = new CarDataModel(cars); 
    } 

你不能把值你在構造函數列表。 如果移動代碼到getCars()方法,它應該工作

public TableBean() {} 

public List<Car> getCars() { 
    if(cars != null && !cars.isEmpty()) return cars; 
    else { 
        cars = new ArrayList<Car>();  
      Car car1 = new Car(); 
      car1.setModel("BMW"); 
      car1.setRandomColor("Black"); 
      cars.add(car1); 
      Car car2 = new Car();  
      car2.setModel("Audi"); 
      car2.setRandomColor("White"); 
      cars.add(car2);  

      carsModel = new CarDataModel(cars); 
    } 
    return cars; 
} 
+0

沒有成功Shervin!使用調試可以看到他花了每一步,並返回一個列表,但瀏覽器中沒有任何內容。要通過getCars切換到。我不知道會是什麼。 :/ – Deb

+0

當我在xhtml上運行時發出警告:NLS缺少消息:CANNOT_FIND_FACELET_TAGLIB在: org.eclipse.jst.jsf.core.validation.internal.facelet.messages。很奇怪!如果我關閉並再次打開此Eclipse警告消失。 – Deb

+0

DataTable可以通過示例顯示:http://primefaces-rocks.appspot.com/ui/datatableRowSelectionInstant.jsf;jsessionid=pQgttcgwYcTcGpZt_1qY0w。現在我不能顯示 Deb