【问题标题】:Is there a way of inserting an id into a Thymeleaf variable dynamically?有没有办法将 id 动态插入到 Thymeleaf 变量中?
【发布时间】:2017-07-26 23:05:36
【问题描述】:

我在循环内的 Java 类中添加了一些 Http 会话变量,每个会话变量都包含一个唯一标识符作为其名称的一部分。

我希望能够使用为每个变量设置的标识符从 Thymeleaf 模板上的循环中读取这些变量。这可能吗?如果是这样,我应该使用什么语法将 id 插入到 Thymeleaf 模板中的会话变量的名称中?

每个Http会话变量的名称为“Sid”+unique_id,如下。

    <tr th:each="item : ${items}">
                            <td th:text="${item.id}"></td>
                            <td th:text="${item.name}"></td>
                            <td th:if="${item.expired != null 
                            and session.Sid${item.id} == 'available'}">
    </tr>

【问题讨论】:

    标签: java servlets thymeleaf httpsession


    【解决方案1】:

    您可以使用preprocessing 执行此操作。

    <tr th:each="item : ${items}">
        <td th:text="${item.id}"></td>
        <td th:text="${item.name}"></td>
        <td th:if="${item.expired != null and session.Sid__${item.id}__ == 'available'}">??<td>
    </tr>
    

    (它有效,但总的来说我不推荐这种结构。我认为你应该使用地图,或者为提取这样的数据而构建的其他数据结构。然后你可以做类似的事情:@ 987654323@或session.sids.get(item.id))

    【讨论】:

    • 非常感谢!出于好奇,您为什么不推荐这种方法?
    • @James 它让你的代码更加脆弱。想象一下,如果 item.id 曾经包含一个空格(或者以某种方式碰巧是负数)。您会收到 thymeleaf 解析器错误,并且页面本身将无法使用。如果您使用地图或其他数据结构,页面将正常呈现(因为 session.sids[item.id] 只会返回 null)。
    猜你喜欢
    • 2022-01-23
    • 2016-05-31
    • 2017-07-08
    • 1970-01-01
    • 2021-10-22
    相关资源
    最近更新 更多