2015-06-18 29 views
7

Các Thymeleaf 2.1.4 doc chính thức cho thấy việc sử dụng for each như sau:Thymeleaf: Cách loại trừ thẻ bên ngoài khi sử dụng th: each?

<tr th:each="prod : ${prods}" th:class="${prodStat.odd}? 'odd'"> 
    <td th:text="${prod.name}">Onions</td> 
    <td th:text="${prod.price}">2.41</td> 
    ... 
</tr> 

Nó tạo ra một <tr> trong mỗi lần lặp, mà là hoàn hảo phù hợp trong tình huống này. Tuy nhiên trong trường hợp của tôi, tôi không cần thẻ bên ngoài (ở đây, <tr>).


trường hợp sử dụng của tôi là để tạo ra <bookmark> thẻ trong một cách đệ quy, không có thẻ khác bao gồm, và một thẻ <bookmark> phải chứa tên và thuộc tính href.

<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"> 
<body> 

<div th:fragment="locationBookmark(location)"> 
    <bookmark th:each="map : ${location.subMaps}"> 
     <bookmark th:name="${map.name}" 
        th:href="'#'+${map.id}" th:include=":: locationBookmark(${map})"> 
     </bookmark> 
    </bookmark> 
</div> 
</body> 
</html> 

bao gồm cả phụ:

<bookmark th:include="bookmark : locationBookmark(${rootLocation})"/> 

Rất cám ơn.

+0

bạn có thể cung cấp mẫu thẻ mà bạn muốn không chặt chẽ bằng thẻ bên ngoài? –

+0

@PavelUvarov Trường hợp sử dụng của tôi được thêm vào, xem câu hỏi của tôi. – July

+0

Hãy để tôi đoán: bạn muốn tạo các thẻ con n-leveled? Tôi nghĩ như vậy bởi vì: bookmark không phải là thẻ html và vì nó không được khuyến cáo không đóng các thẻ với nội dung. Nếu tôi đúng - bạn nên tạo và sử dụng một số mẫu phụ theo cách đệ quy. Tôi không giỏi ThymeLeaf để nói làm thế nào bạn nên làm điều đó, nhưng tôi chắc chắn biết rằng điều này là có thể - hãy xem tài liệu của họ một cách cẩn thận. –

Trả lời

20

Thậm chí nếu nó có thể được thực hiện bằng th:remove="tag" tôi sẽ đề nghị bạn sử dụng th:block

<th:block th:each="map : ${location.subMaps}"> 
    <bookmark th:name="${map.name}" 
     th:href="'#'+${map.id}" th:include=":: locationBookmark(${map})"> 
    </bookmark> 
</th:block> 
+0

Rất vui khi biết, cảm ơn rất nhiều – July

+0

@Xoá tôi đã sửa chữa thành .. hy vọng điều đó là đúng cho tất cả các phiên bản Thymeleaf, nhưng vì XML nằm bên dưới ... –

0

Bạn có thể sử dụng thẻ DIV hoặc bất kỳ thẻ HTML nào khác để lặp lại. Điều này sẽ không tạo ra một thẻ TR. Nhưng để bảng hiển thị chính xác, bạn cần có các thẻ TD bên trong các thẻ TR.

<div th:each="prod : ${prods}" th:class="${prodStat.odd}? 'odd'"> 
    <td th:text="${prod.name}">Onions</td> 
    <td th:text="${prod.price}">2.41</td> 
</div> 
+0

Điều tôi muốn xóa hoàn toàn thẻ thay vì đổi tên. – July

0

tôi đã tìm ra cách để giải quyết vấn đề, thật dễ dàng, chỉ cần thêm th:remove="tag" cho thẻ bên ngoài sẽ làm.

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