多个相同长度的模型同时迭代 [英] multiple models of the same length iterating simultaneously
问题描述
我有一个关于 spring boot 中的 thymeleaf 的非常特别的问题,使用 Java Persitence API (JPA).
我有三个表(A、B、C),因此模型看起来像这样:
答:
@Entity@Table(name = "A")公共类 ATable {私人援助;私人字符串内容;//getter 和 setter}
乙:
@Entity@Table(name = "B")公共类 BTable {私人国际投标;私人字符串 bcontent;//getter 和 setter}
C:
@Entity@Table(name = "C")公共类 CTable {私有 int cid;私人字符串 ccontent;//getter 和 setter}
按照设计,这三个表格将具有相同数量的内容.
表格的行是这样的:
答:
帮助内容
1 a12 a23 a3
乙:
出价内容
1 b12 b23 b3
C:
cid ccontent
1 c12 c23 c3
现在,我想在我的 HTML5 模板中同时遍历这三个表,结果应该是这样的:
a1b1c1
b1b2b3
c1c2c3
我的控制器是这样的:
<代码>...列表atable = new ArrayList<>();model.addAttribute(atable", atable);列表 atables = atableRepository.findAll();model.addAttribute(atables", atables);列表 btable = new ArrayList<>();model.addAttribute(btable", btable);列表 btables = btableRepository.findAll();model.addAttribute(btables", btables);列表 ctable = new ArrayList<>();model.addAttribute(ctable", ctable);列表 ctables = ctableRepository.findAll();model.addAttribute(ctables", ctables);...
为了只遍历这些表中的一个,我可以这样做:
<预><代码><tr th:each=atable : ${atables}"><span th:text="${atable.acontent}"></tr>但是我们怎样才能同时使用三个表呢?
我想我已经很清楚地表达了我的问题,我真的希望有人能帮助我.提前致谢.
创建一个 DTO 来表示 HTML 中的一行:
公共类行{私人 ATable 餐桌;私人 BTable btable;私有 CTable 表;//构造函数 + getter 在这里}
然后在您的控制器中使用它:
@GetMapping公共字符串showPage(模型模型){列表atables = atableRepository.findAll();列表btables = btableRepository.findAll();列表ctables = ctableRepository.findAll();列表<行>行 = 新的 ArrayList<>();for( int i = 0; i < atables.size();i++) {rows.add(new Row(atables.get(i), btables.get(i), ctables.get(i));}model.addAttribute("rows", rows);}
现在在 Thymeleaf 中遍历您的行:
<span th:text="${row.atable.acontent}"><span th:text="${row.btable.acontent}"><span th:text="${row.ctable.acontent}"></tr>I have a very particular question related to thymeleaf in spring boot, using the Java Persitence API (JPA).
I have three tables (A, B, C), hence models, they look like this:
A:
@Entity
@Table(name = "A")
public class ATable {
private int aid;
private String acontent;
// getters and setters
}
B:
@Entity
@Table(name = "B")
public class BTable {
private int bid;
private String bcontent;
// getters and setters
}
C:
@Entity
@Table(name = "C")
public class CTable {
private int cid;
private String ccontent;
// getters and setters
}
These three tables, by design, will have the same amount of content.
The rows of the tables are like this:
A:
aid acontent
1 a1
2 a2
3 a3
B:
bid bcontent
1 b1
2 b2
3 b3
C:
cid ccontent
1 c1
2 c2
3 c3
Now, I would like to iterate through these three tables simultaneously in my HTML5 template, the result should be something like this:
a1
b1
c1
b1
b2
b3
c1
c2
c3
My controller is like this:
...
List<ATable> atable = new ArrayList<>();
model.addAttribute("atable", atable);
List<ATable> atables = atableRepository.findAll();
model.addAttribute("atables", atables);
List<BTable> btable = new ArrayList<>();
model.addAttribute("btable", btable);
List<BTable> btables = btableRepository.findAll();
model.addAttribute("btables", btables);
List<CTable> ctable = new ArrayList<>();
model.addAttribute("ctable", ctable);
List<CTable> ctables = ctableRepository.findAll();
model.addAttribute("ctables", ctables);
...
To iterate through only one of these tables I could something like this:
<tr th:each="atable : ${atables}">
<span th:text="${atable.acontent}">
</tr>
But how can we do it simultaneously with, say, three tables?
I think I have been clear enough with tables representing my issue, and I really hope someone can help me. Thanks in advance.
解决方案 Create a DTO that represents a row in your HTML:
public class Row {
private ATable atable;
private BTable btable;
private CTable ctable;
// constructor + getters here
}
Then use this in your controller:
@GetMapping
public String showPage(Model model) {
List<ATable> atables = atableRepository.findAll();
List<BTable> btables = btableRepository.findAll();
List<CTable> ctables = ctableRepository.findAll();
List<Row> rows = new ArrayList<>();
for( int i = 0; i < atables.size();i++) {
rows.add(new Row(atables.get(i), btables.get(i), ctables.get(i));
}
model.addAttribute("rows", rows);
}
Now iterate in Thymeleaf through your rows:
<tr th:each="row : ${rows}">
<span th:text="${row.atable.acontent}">
<span th:text="${row.btable.acontent}">
<span th:text="${row.ctable.acontent}">
</tr>
这篇关于多个相同长度的模型同时迭代的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文
登录
关闭
扫码关注1秒登录
发送“验证码”获取
|
15天全站免登陆