Je suis nouveau sous Vaadin et j’aimerais avoir un peu d’aide pour un problème. Donc mon application récupère un fichier et stocke ses données sous forme de liste (avec la fonction ArrayList) et j’aimerais les afficher dans un tableau. J’ai regardé comment marche la fonction Grid, mais sous les tuto on ne peut qu’afficher les données qui sont à l’intérieur d’une classe. Je ne peux pas créer de classe avec des getter et setter, car je ne connais pas le nombre d’éléments à afficher au préalable. Pourriez-vous m’indique la méthode ou une autre fonction qui permet d’afficher mes éléments.
Je ne comprends pas exactement ta question.
Tu récupères un fichier, tu le transformes en List<?> (liste de quel type, une Map, un bean ? ). C’est bien ça ?
Après il faut définir ta grille les colonnes que tu veux afficher puis faire un setItems de cette liste.
Grid<?> myGrid = new Grid();
myGrid.addColumn(…)
…
grid.setItems(myImportedList);
private List<List<?>> importFile = new ArrayList<>();
private Grid<List<?>> myGrid = new Grid<>();
Si tu mets ceci:
private List<List<?>> importFile = new ArrayList<>();
private Grid<List> myGrid = new Grid<>();
Ca ne marche plus (à cause du setItems).
private List<List<?>> importFile = new ArrayList<>();
private Grid<List<?>> myGrid = new Grid<>();
@Override
protected void init(VaadinRequest vaadinRequest) {
importFile.add(Arrays.asList("DATA line 1 col 1 ","Data line 1 col 2",1));
importFile.add(Arrays.asList("DATA line 2 col 1 ","Data line 2 col 2",1));
importFile.add(Arrays.asList("DATA line 3 col 1 ","Data line 3 col 2",1));
myGrid.setItems(importFile);
// myGrid.setDataProvider(DataProvider.ofCollection(importFile)); // autre solution au lieu de setItems
myGrid.addColumn(line -> line.get(0)).setCaption("Col 1");
myGrid.addColumn(line -> line.get(1)).setCaption("Col 2");
myGrid.addColumn(line -> line.get(2)).setCaption("Col 3");
setContent(myGrid);
}
Essaie ceci:
myGrid.setDataProvider(DataProvider.ofCollection(importFile));
au lieu de myGrid.setItems
Le deuxième code est faux: Tu itères sur tes lignes (l’indice i est un indice de ligne) et ensuite tu utilises cet indice pour afficher une colonne.
private List<List<?>> importFile = new ArrayList<>();
private Grid<List<?>> myGrid = new Grid<>();
@Override
protected void init(VaadinRequest vaadinRequest) {
importFile.add(Arrays.asList("DATA line 1 col 1 ","Data line 1 col 2",1));
importFile.add(Arrays.asList("DATA line 2 col 1 ","Data line 2 col 2",1));
importFile.add(Arrays.asList("DATA line 3 col 1 ","Data line 3 col 2",1));
importFile.add(Arrays.asList("DATA line 4 col 1 ","Data line 4 col 2",1));
// myGrid.setItems(importFile);
myGrid.setDataProvider(DataProvider.ofCollection(importFile));
if (importFile != null && importFile.size() > 0){
List<?> firstLine = importFile.get(0);
for (int columnIndex = 0; columnIndex < firstLine.size(); columnIndex++) {
final int finalColumnIndex = columnIndex;
myGrid.addColumn(line -> line.get(finalColumnIndex)).setCaption("Colonne " + finalColumnIndex);
}
}
setContent(myGrid);
}