如何执行嵌套 Thymeleaf 循环以创建包含来自两个 JPA 表类的字段的表
Posted
技术标签:
【中文标题】如何执行嵌套 Thymeleaf 循环以创建包含来自两个 JPA 表类的字段的表【英文标题】:How to perform a nested Thymeleaf loop to create a table containing fields from two JPA table classes 【发布时间】:2017-06-04 20:06:29 【问题描述】:我正在尝试使用 thymeleaf 模板创建一个网页,以显示一个订单表,其中包含一个提供与特定订单相关联的产品列表的字段。
我的控制器类:
@Controller
public class WebPage
@Autowired
private OrderRepository orderRepository;
@Autowired
private ProductRepository productRepository;
@RequestMapping("/test")
public String index(Model model)
model.addAttribute("ordertable", orderRepository.findAll());
model.addAttribute("producttable", productRepository.findAll());
return "tablepage";
百里香模板的相关部分:
<table class="table">
<thead>
<tr>
<th>ID</th>
<th>stuff</th>
<th>Stuuff</th>
<th>stuff</th>
<th>products</th>
</tr>
</thead>
<tbody>
<tr th:each="ordertbl: $ordertable">
<td th:text="$ordertbl.stuffId"/>
<td th:text="$ordertbl.stuffname"/>
<td th:text="$ordertbl.stuffname"/>
<td th:text="$ordertbl.stuff"/>
<td>
<span th:each="producttbl: $producttable"><span th:text="$ordertbl.products"/></span>
</td>
</tr>
</tbody>
</table>
这样做是创建一个订单表,但在最后一个字段中,它会根据产品表中的产品数量多次列出订单中包含的所有产品。
我将如何更改此设置,以便订单字段仅列出属于每一行的产品一次。我知道这很可能是嵌套 for 循环错误,或者是我使用 findall()
方法的问题,但我不知道如何解决。
我更喜欢使用嵌套的产品表,而不是从 order jpa 实体类中获取产品。 谢谢。
【问题讨论】:
显示您的产品和订单实体 有必要吗?它们中的所有内容都是上述变量的 getter 和 setter,例如stuffname
以及为另一个表创建列表。例如在我的订单表中:private List<Products> products; public List<Products> getProducts() return products;
【参考方案1】:
如果您尝试显示每个order
中的products
,则此行是错误的:
<span th:each="producttbl: $producttable"> <span th:text="$ordertbl.products" /> </span>
您正在迭代模型中的producttable
列表,而不是循环中当前ordertbl
的products
。应该是
<span th:each="producttbl: $ordertbl.products"> <span th:text="$producttbl" /></span>
【讨论】:
以上是关于如何执行嵌套 Thymeleaf 循环以创建包含来自两个 JPA 表类的字段的表的主要内容,如果未能解决你的问题,请参考以下文章