我有两个 html 模板,它们具有相同的功能,但由两个不同的 Controller 处理:
第一个 html 由版主 Controller 处理
<form th:action="@{/moderator/new-user-form}" th:object="${caltest}" method="post"
enctype="multipart/form-data" class="form-validate form row">
<!-- some code -->
</form>
第二个 html 由管理员 Controller 处理
<form th:action="@{/admin/new-user-form}" th:object="${caltest}" method="post"
enctype="multipart/form-data" class="form-validate form row">
<!-- some code -->
</form>
如您所见,这些模板仅在 action
url 上有所不同:
th:action="@{/someurl}"
是否可以对来自不同 Controller 的动态 url 使用相同的模板?
最佳答案
有许多不同的方法可以做到这一点...最简单的方法是在 Controller 中使用相同的模板,并在每个 Controller 中传递一个包含正确操作的变量。
例如:
// Moderator controller
@RequestMapping(value = "/moderator")
public String moderator(Map<String, Object> model) {
model.put("action", "/moderator/new-user-form");
return "new-user-form";
}
// Admin controller
@RequestMapping(value = "/moderator")
public String moderator(Map<String, Object> model) {
model.put("action", "/admin/new-user-form");
return "new-user-form";
}
在 html 中
<form th:action="@{${action}}">
如果这不合适,您可以将表单本身变成一个片段,然后将操作作为参数传递。像这样:
<!-- Fragment -->
<form th:fragment="userform (action)" th:action="@{${action}}">
.
.
.
</form>
<!-- Including the fragment -->
<div th:replace="fragments/userform :: userform(action='/admin/new-user-form')" />
<!-- or -->
<div th:replace="fragments/userform :: userform(action='/moderator/new-user-form')" />
关于java - Thymeleaf:使用相同的模板和来自不同 Controller 的动态 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43866925/