我有html表单。三个<select>
标签包含来自数据库的数据。
我希望当我按下按钮时,请求被发送到如下所示的 URL:/admin/{facultyName}/{specialtyName}/{groupName}
其中facultyName是第一个<select>
中的选定值,specialtyName是第二个<select>
中的选定值,groupName是第三个<select>
中的选定值。
你能给我一个例子来说明如何做到这一点吗?任何选择都会很好,有形式和没有形式。
附言我的尝试:
<form name='f' action="#" th:action="@{/admin/(faculty=${facultyName})/(specialty=${specialtyName})/(group=${groupName})}" th:object="${schedule}" method='POST'>
<table>
<tr>
<td>
<select th:field="*{facultyName}">
<option value="">Не выбран</option>
<option th:each="faculty : ${facultyAll}"
th:value="${faculty.facultyName}"
th:utext="${faculty.facultyName}">
</option>
</select>
</td>
</tr>
<tr>
<td>
<select th:field="*{specialtyName}">
<option value="">Не выбран</option>
<option th:each="specialty : ${specialtyAll}"
th:value="${specialty.specialtyName}"
th:utext="${specialty.specialtyName}">
</option>
</select>
</td>
</tr>
<tr>
<td>
<select th:field="*{groupName}">
<option value="">Не выбран</option>
<option th:each="group : ${groupAll}"
th:value="${group.groupName}"
th:utext="${group.groupName}">
</option>
</select>
</td>
</tr>
<tr>
<td><input type="submit" class="btn btn-primary" value="Work with this group"></td>
</tr>
</table>
这仅对百里香叶是不可能的。Thymeleaf 在生成 HTML 时会填写action
属性,但不会即时更新它。
您将需要使用 Javascript 动态更新action
属性。
另一种选择是使用固定 URL 并从服务器动态重定向用户。
@Controller
public class AdminController {
@GetMapping("/admin/select")
public String selectAdmin(Model model) {
model.addAttribute("selectionCriteria", new AdminSelectionCriteria());
}
@PostMapping("/admin/select")
public String doSelectAdmin(@ModelAttribute("selectionCriteria") AdminSelectionCriteria criteria) {
// check the 3 fields in AdminSelectionCriteria
if( ... )
return "redirect:/admin/.../";
else if( ... )
return "redirect:/admin/../";
...
}
}
在模板中,您将使用:
<form name="f" th:action="@{/admin/select}" th:object="selectionCriteria">