Die Umsetzung SelectableDataModel
XHTML-Seite:
<p:dataTable id="selectProductTable" var="product" value="#{manageFormsView.productModel}" selection="#{manageFormsView.product}" >
bean-Seite:
private SelectableDataModel<Product> productModel=new SelectableDataModel<Product>() {
@Override
public Product getRowData(String rowKey) {
//In a real app, a more efficient way like a query by rowKey should be implemented to deal with huge data
for(Product product : productList) {
if(product.getModel().equals(rowKey))
return product;
}
return null;
}
@Override
public Object getRowKey(Product p) {
return p.getModel();
}
};
möchte ich nicht erzeugen eine neue Klasse, die implementiert SDM, kann ich nicht tun, inline-implementaton wie oben?
Erhalte ich die exception:
javax.faces.FacesException: DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled.
InformationsquelleAutor merveotesi | 2012-01-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ausnahme Meldung ist irreführend. Zur Umsetzung der
SelectableDataModel
Schnittstelle ist nicht ausreichend. Sie müssen auch erweitern eineDataModel
Umsetzung wieListDataModel
. Das kann nicht getan werden im Geschmack von einer anonymen Klasse. Sie wirklich brauchen zu erstellen eine andere Klasse.Können Sie, wenn notwendig, generify es, wenn Sie eine gemeinsame Basis-Konzern auszuführen (mit
getId()
und so weiter), so dass Sie nicht brauchen, um zu erstellen ein anderes für jede Person.Als ganz andere alternative, können Sie auch
rowKey
attribtue der<p:dataTable>
und lassen Sie es finden genau den gleichen Wert wieSelectableDataModel#getRowKey()
. Auf diese Weise brauchen Sie nicht die ganzeSelectableDataModel
Schnittstelle mehr.Siehe auch:
InformationsquelleAutor BalusC
Da Sie nicht scheinen, um eine spezielle Funktion für
getRowData
undgetRowKey
ich denke, man muss nicht so komplizierte Sachen.<p:dataTable>
hat die einzelne Auswahl-Modus mitselection
undrowKey
Attribute, die sollten den job ausreichend. Ihre Tabelle sollte so etwas wie dieses:Und Sie können die ausgewählte Zeile in der
selectedProduct
Eigentum IhrerManagedBean
wie folgt:Ich glaube, mein code sollte ausreichend sein. Sie brauchen nicht zu implementieren, die
productModel
an alle :).Dieser arbeitete für mich, vielen Dank
InformationsquelleAutor Mr.J4mes