Java Thymeleaf下拉选择

Java Thymeleaf下拉选择,java,html,spring-boot,thymeleaf,Java,Html,Spring Boot,Thymeleaf,我正在为我的一个java项目使用Thymeleaf。 现在,我试图实现的是,当我从下拉列表中选择其他内容,而不是默认值“ALL”,然后按下submit按钮[POST],以获取所选项目的详细信息。我希望在提交后,将所选项目显示在下拉列表中。它现在所做的就是返回默认值。如果我在下面提供的代码中添加属性selected,那么它会从列表中选择所有项目,这也是不可接受的,因为它最终总是显示列表的最后一项 <div class="controls"> <select class="

我正在为我的一个java项目使用Thymeleaf。 现在,我试图实现的是,当我从下拉列表中选择其他内容,而不是默认值“ALL”,然后按下submit按钮[POST],以获取所选项目的详细信息。我希望在提交后,将所选项目显示在下拉列表中。它现在所做的就是返回默认值。如果我在下面提供的代码中添加属性selected,那么它会从列表中选择所有项目,这也是不可接受的,因为它最终总是显示列表的最后一项

<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;
}
@modeldattribute(“诱惑者”)
公开名单{
List userList=repo.findAll();
返回用户列表;
}
我还要指出,我的目标是:

<form class="form-search" action="#" method="post"
      th:action="@{/combinedsearch}"
      th:object="${combinedreport}">

所以用这种方法是行不通的

,因为我的对象实际上没有用户字段


有什么想法吗?帮助?

基本上我所做的是在一个combinedReport控制器中,我提取了该用户ID,我在提交HTML表单后收到该ID,然后我将其用于后端需要执行的任何操作,然后我将该用户ID发送回前端,只需将其作为属性添加到模型中:

model.addAttribute(“lastselected”,userId)

然后,我在用户对象中创建了自定义逻辑方法:

public boolean isSelected(Integer userId){
        if (userId != null) {
            return userId.equals(id);
        }
        return false;
    } 
然后,我将my thymeleaf模板中的代码修改为:

<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>

全部的

还有Baaam!它就像一个符咒

不需要在后端实现该方法,只需使用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>

全部的

注意:当循环遍历枚举时,请记住调用.name(),以便比较字符串值。

将用户字段添加到CombinedReport类中有什么问题?CombinedReport是实体对象吗?我已在下面发布了我自己的问题解决方案。因此,这不再是一个悬而未决的问题。我有一个带有
select
字段的表单,如果我使用
th:field
,thymeleaf会更改name属性,它在我的后端抛出一个错误。因此,我使用了类似于您的解决方案的方法作为解决方案,这样我就得到了所需的
名称
属性,而不是thymeleaf从对象名称中指定的属性。