【问题标题】:How to add an object in list using thymeleaf?如何使用百里香在列表中添加对象?
【发布时间】:2013-10-18 11:35:55
【问题描述】:

我在会话中有一个对象,例如一个部门,这个部门有孩子。我得到了它的孩子的列表,现在我想在这个列表中添加这个部门对象。这在服务器端非常简单,但它是可以在百里香中做到这一点。

【问题讨论】:

  • Thymeleaf 用于渲染文档。不是为了操纵模型。你应该先准备好你的数据(将部门添加到你的控制器/服务/等的列表中),然后用 Thymeleaf 渲染它。

标签: thymeleaf


【解决方案1】:

是的,可以在 Thymeleaf 中执行此操作,因为它使用 Object-Graph Navigation Language 来评估表达式值 - ${...} 块的内容。您可以在模型对象上正常访问公共方法,因此调用 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);

Thymeleaf 模板:

<!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
  • 主要部门

P.S. Spring Expression Language 与 Spring 集成一起使用,但对于本示例而言,它没有区别。

【讨论】:

  • 你怎么能把你在那里做的事情绑定到一个表单对象上,这样你就可以把它传回控制器
【解决方案2】:

这就像在返回值之前在 getXXXX 方法中设置一个值。它不符合模式。在控制器或控制器中进行数据操作以委托给其他东西,但不在视图中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-12
    • 2015-05-18
    • 2016-07-29
    • 2019-06-01
    • 1970-01-01
    • 2017-07-31
    • 2021-01-25
    • 2019-08-10
    相关资源
    最近更新 更多