5

たとえば、部門のセッションにオブジェクトがあり、この部門には子がいます。その子のリストを取得しました。この部門オブジェクトをこのリストに追加したいと思います。これはサーバー側では非常に簡単ですが、実行できますか?これはタイムリーフにあります。

4

2 に答える 2

3

はい、Thymeleaf でそれを行うことは可能です。これは、オブジェクトグラフ ナビゲーション言語を使用して式の値 (${...}ブロックの内容) を評価しているためです。モデルオブジェクトのパブリックメソッドに通常どおりアクセスできるため、boolean List#add(E e)メソッドの呼び出しが機能します。

しかし、他の人が言ったように、それは本当に良い考えではなく、コントローラーでモデルを埋めるためにアプリケーションを再設計する必要があります。反対に、厄介なハックを作成したり、単に遊んだりする必要がある場合は、以下の例を参照してください。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 Expression Languageは Spring 統合で使用されますが、この例では違いはありません。

于 2014-09-29T22:00:51.433 に答える
-1

これは、値を返す前に getXXXX メソッドで値を設定するようなものです。パタパタに合わない。ビューではなく、コントローラーまたはコントローラーでデータ操作を行って、別のものに委任します。

于 2014-08-07T17:34:15.347 に答える