好吧,我是Spring和Thymleaf的新手。我正在尝试做一些如此简单的事情,这应该是一个明智的选择。但我无法让它发挥作用。简单的问题是 - 如何在网页中显示字符串列表?
我有以下型号
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;
}
}
我的网页包含以下内容:
<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>
我将“.name”添加到“item”只是因为我找到了几个例子,他们有一个字符串列表并做了类似的事情。但是他们在对象上有“.name”。
但它仍然无效。无序列表最终为空。即无序标签内没有任何列表项。
我我做错了什么?指针很高兴接受。
答案 0 :(得分:22)
由于没有填充模型的例子,我认为你将一些字符串放入TestModel
列表字段的实例中。
TestModel greeting= new TestModel();
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
model.addAttribute("greeting", greeting);
然后您的Thymeleaf模板示例中出现了更多错误。
th:object
使用对象选择,则必须首先使用asterix *
来访问对象属性。星号语法评估所选对象上的表达式而不是上下文变量映射。List<String>
),但是您想要访问实际上在name
对象上不存在的属性String
。您必须以一种方式修复您的Thymeleaf模板 - 请参阅示例。
根本没有对象选择
<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>
正确的对象选择
<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>
答案 1 :(得分:1)
<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>
使用table和Object的另一个例子。可能对其他人有用。