2014-09-25 52 views
12

好吧,我是一个湿背后的春天和thymleaf耳朵新人。我试图做一些如此简单的事情,应该是一件容易的事情。但我无法让它工作。简单的问题是 - 如何在网页中显示字符串列表?春天,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”。

但它仍然不起作用。无序列表结束为空。即无序标签内没有任何列表项。

什么am我做错了吗?指针欣然接受。

回答

19

由于没有填充模型的例子,我假设你把一些字符串放入TestModel的列表字段的例子中。

TestModel greeting= new TestModel(); 
List<String> list = new ArrayList<>(); 
list.add("A"); 
list.add("B"); 
model.addAttribute("greeting", greeting); 

然后在您的Thymeleaf模板示例中存在更多错误。

  1. 如果您正在使用通过th:object对象选择,你必须首先用星号*访问对象的属性。 Asterisk语法评估所选对象上的表达式而不是上下文变量映射。
  2. 对象选择只影响DOM中的子节点。
  3. 在你的例子中,你想遍历字符串列表(List<String>),但是你想访问属性name这实际上并不存在于Java 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> 
+0

这两个例子都有效。谢谢你让我直截了当。 正如我所说 - 我*非常*新颖的thymeleaf语法。我还没有找到一个很好的教程,描述何时使用什么。我从另一个网站复制了一个例子,但它不起作用。 再次感谢您的帮助。 – 2014-09-26 14:53:14

+1

您好,我希望我的例子能帮助您解决这个问题。我可以推荐官方的Thymeleaf文档。阅读和阅读考试很容易。官方网站上还有一些教程。检查http://www.thymeleaf.org/documentation.html – 2014-09-26 15:01:03

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> 

又如。可能对其他人有用。