Ok, je viens de Spring and Thymleaf, nouveau venu mouillé derrière les oreilles. J'essaie de faire quelque chose d'aussi simple, ça devrait être une évidence. Mais je ne peux pas le faire fonctionner. La question simple est de savoir comment afficher une liste de chaînes dans une page Web.
J'ai le modèle suivant
import Java.util.List;
public class TestModel {
private List<String> list = null;
private String content;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public List<String> getList() { return list; }
public void setList(final List<String> list) {
this.list = list;
}
}
Ma page Web contient les éléments suivants:
<div th:if="${greeting.list != null}">
<h1>Result</h1>
<ul>
<th:block th:object="${greeting}" th:each="item : ${list}">
<li th:text="${item.name}">Item description here...</li>
</th:block>
</ul>
</div>
J'ai ajouté le ".name" à "item" uniquement parce que j'ai trouvé quelques exemples où ils avaient une liste de chaînes et faisaient quelque chose de similaire. Mais ils avaient le ".name" sur l'objet.
Mais ça ne marche toujours pas. La liste non ordonnée finit par être vide. C'est à dire. Il n'y a aucun élément de liste dans les balises non ordonnées.
Qu'est-ce que am je fais mal? Pointeurs volontiers acceptés.
Puisqu'il n'y a pas d'exemple de modèle de remplissage, je suppose que vous avez mis certaines chaînes dans l'instance du champ de liste de TestModel
comme ceci.
TestModel greeting= new TestModel();
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
model.addAttribute("greeting", greeting);
Il y a ensuite plus d’erreurs dans votre exemple de modèle Thymeleaf.
th:object
, vous devez d'abord utiliser astérisque *
pour accéder aux propriétés de l'objet. La syntaxe Asterisk évalue les expressions sur les objets sélectionnés au lieu de mapper les variables de contexte.List<String>
), mais vous souhaitez accéder à la propriété name
qui, en fait, n'existe pas sur l'objet Java String
.Vous devez corriger votre modèle Thymeleaf d’une manière - voir exemples.
Pas de sélection d'objet du tout
<div th:if="${greeting.list != null}">
<h1>Result</h1>
<ul>
<li th:each="item : ${greeting.list}" th:text="${item}">Item description here...</li>
</ul>
</div>
Sélection d'objet appropriée
<div th:if="${greeting.list != null}">
<h1>Result</h1>
<ul>
<th:block th:object="${greeting}">
<li th:each="item : *{list}" th:text="${item}">Item description here...</li>
</th:block>
</ul>
</div>
<table th:object="${userList}" id="userTable" border="1">
<tr th:each="user :${userList}">
<td th:text="${user.getName()}"></td>
<td th:text="${user.getEmail()}"></td>
</tr>
</table>
Un autre exemple utilisant table et Object. Pourrait être utile à quelqu'un d'autre.