我在会话中有一个对象,例如一个部门,这个部门有孩子。我得到了它的孩子的列表,现在我想在这个列表中添加这个部门对象。这在服务器端非常简单,但可以做到这个在百里香叶中。
问问题
9164 次
2 回答
3
是的,可以在 Thymeleaf 中执行此操作,因为它使用对象图导航语言来评估表达式值 -${...}
块的内容。您可以在模型对象上正常访问公共方法,因此调用boolean List#add(E e)
方法可以正常工作。
但是正如其他人提到的那样,这不是一个好主意,您应该重新设计您的应用程序以将您的模型填充到控制器中。另一方面,如果您需要进行一些讨厌的 hack 或只是玩玩,请参见下面的示例。它th:text
用于评估添加到列表然后th:remove
清理标签并且不留下任何痕迹。
部门模型类:
public class Department {
private String name;
public Department(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
模型中的数据(例如会话)
List<Department> children = new ArrayList<>();
children.add(new Department("Department 1"));
children.add(new Department("Department 2"));
// In model as *department* variable
Department department = new Department("Main Department");
department.setChildren(children);
百里香模板:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
</head>
<body>
<h1>Before</h1>
<ul>
<li th:each="child : ${department.children}" th:text="${child.name}"></li>
</ul>
<!--/* Here comes a nasty trick! */-->
<div th:text="${department.children.add(department)}" th:remove="all"></div>
<h1>Result</h1>
<ul>
<li th:each="child : ${department.children}" th:text="${child.name}"></li>
</ul>
</body>
</html>
前
- 部门 1
- 部门 2
结果
- 部门 1
- 部门 2
- 主要部门
PS Spring 表达式语言与 Spring 集成一起使用,但对于此示例,它没有区别。
于 2014-09-29T22:00:51.433 回答
-1
这就像在返回值之前在 getXXXX 方法中设置一个值。它不符合模式。在控制器或控制器中进行数据操作以委托给其他东西,但不在视图中。
于 2014-08-07T17:34:15.347 回答