Thymeleaf 构造 URL 与变量

2022-08-31 15:16:12

我有以下代码在我的控制器中设置一个变量:

model.set("type", type);

在 thymeleaf 视图中,我想使用操作 url 构造一个表单:

/mycontroller/{type}

任何想法如何实现这一目标?我读过百里香叶文档,但没有运气。


答案 1

正如user482745在评论中建议的那样(现已删除),我之前建议的字符串串联

<form th:action="@{/mycontroller/} + ${type}">

在某些 Web 上下文中会失败。

Thymeleaf 使用 LinkExpression 来解析表达式。在内部,这使用HttpServletResponse#encodeURL(String)。。它的 javadoc 状态@{..}

对于可靠的会话跟踪,servlet 发出的所有 URL 都应通过此方法运行。否则,URL重写不能与不支持cookie的浏览器一起使用。

在通过 URL 完成会话跟踪的 Web 应用程序中,该部分将追加到在追加 之前发出的字符串中。你不想要这个。@{..}${..}

相反,请按照文档中的建议使用路径变量

您还可以以路径变量的形式包含参数,类似于普通参数,但在 URL 的路径中指定占位符:

<a th:href="@{/order/{id}/details(id=3,action='show_all')}">

所以你的例子会看起来像这样

<form th:action="@{/mycontroller/{path}(path=${type})}"> //adding ending curly brace

答案 2

如果您不想使用字符串串联(由Sotirios提出),则可以在URL链接中使用表达式预处理

<form th:action="@{/mycontroller/__${type}__}">