Sto cercando di imparare PF quindi ho iniziato a visualizzare datatable prima e navigando alla pagina successiva su rowClick passando parametri, ma mi sono bloccato con il seguente errore. Ho trovato un problema simile a quella domanda, ma ancora senza fortuna. Spero che qualcuno mi aiuti.FacesException: DataModel deve implementare org.primefaces.model.SelectableDataModel quando la selezione è abilitata
sto ottenendo seguente errore:
DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled.
Caused by:
javax.faces.FacesException - DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled.
mia pagina:
<?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" rowkey="#{var.model}"
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>
mie classi di fagioli:
@ManagedBean
@ViewScoped
public class TableBean extends ListDataModel<Car> implements SelectableDataModel<Car>{
private List<Car> cars;
private Car car;
public List<Car> getCars() {
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);
return cars;
}
public String onRowSelect(){
System.out.println("Row Click!!!");
return "otherpage";//Does this nav works???if not how???
}
public Car getCar() {
return car;
}
@Override
public Car getRowData(String pArg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public Object getRowKey(Car pArg0) {
// TODO Auto-generated method stub
return null;
}
}
OtherBean:
public class Car{
private String model;
private String randomColor;
public String getRandomColor() {
return randomColor;
}
public void setRandomColor(String pRandomColor) {
randomColor = pRandomColor;
}
public String getModel() {
return model;
}
public void setModel(String pModel) {
model = pModel;
}
}
Grazie per il commento, BalusC, ho un paio di domande, qual è l'uso di rowKey? È per il valore univoco per la colonna della tabella visualizzata? Cosa succede se ho diciamo 2 chiave primaria nella stessa tabella. Un'altra domanda è: cosa intendi con se uso rowKey non devo implementare CarDataModel, puoi spiegare un po '... e puoi anche fare luce su quale attributo di selezione fa in. –
user1226447
Il 'rowKey' dice fondamentalmente a PrimeFaces quale sia l'identificatore univoco della riga. La 'selection' dice fondamentalmente a PrimeFaces dove deve ottenere/impostare i riferimenti delle righe selezionate. Il punto di "SelectableDataModel" deve essere in grado di identificare le righe univoche basate su altri criteri rispetto a ciò che è già disponibile dall'oggetto riga stesso (per il quale è necessario 'rowKey'). – BalusC
Cosa facciamo se ci sono 2 chiavi primarie, cosa facciamo in tale scenario? – user1226447