我正在将Thymeleaf用于我的一个java项目。 现在,我想要实现的是,当我从下拉列表中选择其他内容时,而不是默认值“ALL”,然后按提交按钮[POST],以获取有关所选项目的详细信息。我希望在提交后保留选择项目显示在下拉列表中。它现在做了什么,它返回到默认值。如果我添加到所选代码下面提供的代码属性,那么它将从列表中选择所有项目,这也是不可接受的,因为它最终总是显示列表的最后一项。
<div class="controls">
<select class="form-control" name="example" id="example">
<option value="0">ALL</option>
<option th:each="user : ${allUsers}" th:value="${user.id}" th:text="${user.name}">
</option>
</select>
</div>
我的控制器获取列表,我保持尽可能简单:
@ModelAttribute("allUsers")
public List<User> allUsers() {
List<User> userList= repo.findAll();
return userList;
}
我还要注意,我的目标是:
<form class="form-search" action="#" method="post"
th:action="@{/combinedsearch}"
th:object="${combinedreport}">
所以使用这样的东西的想法不起作用
<select th:field="*{user}">
,因为我的对象实际上并没有将User作为字段。
有什么想法吗?帮助
答案 0 :(得分:3)
基本上我所做的是在一个CombinedReport控制器中,我提取了我在HTML表单提交后收到的user_ID,然后我将它用于我需要在后端做的任何事情,然后我将该user_id发送回前面结束,只需将其作为属性添加到模型中:
model.addAttribute("lastselected", userId);
然后我在User的对象中创建了自定义逻辑方法:
public boolean isSelected(Integer userId){
if (userId != null) {
return userId.equals(id);
}
return false;
}
然后我将我的百万美元模板中的代码修改为:
<select class="form-control" name="example" id="example">
<option value="0">ALL</option>
<option th:each="user : ${allUsers}"
th:value="${user.id}"
th:selected="${user.isSelected(lastselected)}"
th:text="${user.name}">
</option>
</select>
和baaaam!它就像一个魅力!
答案 1 :(得分:0)
无需在后端实现该方法,只需使用SPEL表达式eq
<select class="form-control" name="example" id="example">
<option value="0">ALL</option>
<option th:each="user : ${allUsers}"
th:value="${user.id}"
th:selected="${user.id eq lastselected}"
th:text="${user.name}">
</option>
注意:在遍历ENUM时,请记住调用.name(),以便比较字符串值。