J'essayais d'implémenter un DataTable Editable avec RowSelection activé.
Mais il jette une exception:
DataModel doit implémenter org.primefaces.model.SelectableDataModel lorsque la sélection est activée.
J'ai implémenté le DataModel dans la classe d'objet et la classe de bean géré, mais l'erreur est la même. Maintenant, seul un tableau vide apparaît pour moi. S'il vous plaît aider.
Il y a deux solutions à ce problème:
Le premier est plus simple. Ajouter rowKey="#{myEntity.carID}"
à votre p:dataTable
devrait résoudre votre problème
Vous pouvez obtenir cette erreur si vous essayez d'ajouter un nouvel élément à la liste sous-jacente et oubliez d'attribuer une valeur à rowKey du nouvel élément. Ou en d'autres termes, pour l'exemple, si myEntity.carID est null.
En plus des solutions données par les chiffons, je voudrais mentionner que si la clé de ligne est "NULL" ou si votre liste entière est "NULL", vous risquez d'obtenir la même erreur, même si vous avez effectué toutes les étapes susmentionnées. Si vous souhaitez afficher 0 ligne, retournez une liste avec 0 éléments. Ne retournez pas null
pour la liste.
Le message d'erreur indique que votre modèle de données n'implémente pas les interfaces SelectableDataModel
. Ce doit être une classe séparée. Voici un exemple tiré de la vitrine de PF qui explique comment définir la table de données:
import org.primefaces.model.SelectableDataModel;
public class CarDataModel extends ListDataModel<Car> implements SelectableDataModel<Car> {
...
}
N'oubliez pas de placer la valeur rowKey dans la syntaxe EL.
rowKey="row.id"
échouera mais
rowKey="#{row.id}"
y arrivera.