2014-09-25 13 views
12

Được rồi, tôi là người mới đến sau mùa xuân và Thymleaf. Tôi đang cố gắng làm điều gì đó đơn giản đến nỗi nó không phải là trí tuệ. Nhưng tôi không thể làm cho nó hoạt động được. Câu hỏi đơn giản là - làm thế nào để bạn hiển thị một danh sách các chuỗi trong một trang web?Mùa xuân, Thymleaf và danh sách các chuỗi

tôi có mô hình sau

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; 
    } 
} 

trang web của tôi chứa những điều sau đây:

<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> 

tôi thêm ".name" thành 'mặt hàng' chỉ vì tôi tìm thấy một vài ví dụ mà họ đã có một danh sách các chuỗi và đã làm một cái gì đó tương tự. Nhưng họ đã có ".name" trên đối tượng.

Nhưng nó vẫn không hoạt động. Danh sách không có thứ tự sẽ hết. I E. Không có bất kỳ mục danh sách nào bên trong các thẻ không có thứ tự.

Điều gì am Tôi làm sai? Con trỏ vui vẻ chấp nhận.

Trả lời

19

Vì không có ví dụ về mô hình điền Tôi giả sử bạn đặt một số chuỗi vào trường hợp của trường danh sách TestModel như thế này.

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

Sau đó, có nhiều lỗi trong ví dụ mẫu Thymeleaf của bạn.

  1. Nếu bạn đang sử dụng lựa chọn đối tượng qua th:object, bạn phải ở vị trí đầu tiên sử dụng asterix * để truy cập các thuộc tính đối tượng. Cú pháp dấu hoa thị đánh giá các biểu thức trên các đối tượng được chọn thay vì bản đồ biến ngữ cảnh.
  2. Lựa chọn đối tượng chỉ ảnh hưởng đến các nút con trong DOM.
  3. Trong ví dụ của bạn, bạn muốn lặp qua danh sách các chuỗi (List<String>) nhưng bạn muốn truy cập thuộc tính name mà trên thực tế không tồn tại trên đối tượng Java String.

Bạn phải sửa mẫu Thymeleaf của mình theo một cách - xem ví dụ.

Không có đối tượng lựa chọn ở tất cả các

<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> 

đúng lựa chọn đối tượng

<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

Cả hai ví dụ đều hoạt động. Cảm ơn bạn đã đặt tôi thẳng. Như tôi đã nói - tôi * rất * mới với cú pháp thymeleaf. Tôi chưa tìm thấy một hướng dẫn tốt mô tả khi nào nên sử dụng cái gì. Tôi đã sao chép một ví dụ từ một trang khác nhưng nó không hoạt động. Một lần nữa, cảm ơn sự giúp đỡ của bạn. –

+1

Xin chào, tôi hy vọng ví dụ của tôi sẽ giúp bạn giải quyết vấn đề này. Tôi có thể giới thiệu tài liệu Thymeleaf chính thức. Thật dễ dàng để đọc và đầy đủ các kỳ thi. Ngoài ra còn có một số hướng dẫn trên trang web chính thức. Kiểm tra http://www.thymeleaf.org/documentation.html –

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> 

Một ví dụ khác sử dụng bảng và Object. Có thể hữu ích cho người khác.

Các vấn đề liên quan