当前位置: 首页 > 知识库问答 >
问题:

如何将对象列表绑定到Thymeleaf中的复选框?

穆歌者
2023-03-14
public class User implements Serializable {
    private Integer id;
    private String username;
    private String password;
    private boolean enabled;
    private List<UserRole> userRole = new ArrayList<UserRole>(0);
}
public class UserRole implements Serializable {
    @Id
    @GeneratedValue
    private Integer userRoleId;
    @ManyToMany(mappedBy = "userRole")
    private List<User> users;
    @Column(name = "role", nullable = false, length = 45)
    private String role;
}
@ModelAttribute(value = "user")
    public User userModel() {
        return new User();
}
@RequestMapping(value = "/", method = RequestMethod.GET)
    public String index(Map<String, Object> model) {
    List<UserRole> roles = roleService.getAllRoles();
    model.put("roles", roles);
    return "index";
}

我的发帖方法:

@RequestMapping(value = "/add", method = RequestMethod.POST)
    public String addUser(@ModelAttribute("user") User userModel) {

}

索引页表单:

<form role="form" action="#" th:action="@{/add}" th:object="${user}" method="post">

   <div class="form-group">
            <label for="email">User Name:</label>
            <input type="text" class="form-control" id="username"    th:field="*{username}" required autofocus>
   </div>
   <ul>
        <li th:each="item : ${roles}">
           <input type="checkbox" th:field="*{userRole}" th:value="${item}" />
           <label th:text="${item.role}">Test</label>
        </li>
    </ul>
    <input type="submit" value="Submit" />
</form>

当我单击submit时,browser显示为错误的请求,但没有th:field=“*{userRole}”,我可以提交表单。有什么办法解决这个问题吗?

private List<String> userRoles = new ArrayList<>(0);

然后如@roel所述更改了表单。

<li th:each="item, stat : ${roles}">
    <label th:text="${stat.index}">Test</label>
    <input type="checkbox" th:field="*{userRoles[__${stat.index}__]}" th:value="${item.userRoleId}" />
    <label th:text="${item.role}">Test</label>
</li>

多谢了。

共有1个答案

闾丘淇
2023-03-14

您正在尝试将item作为值添加到列表中。这就像试图说arraylist list=5;

您需要的是将项目添加到列表中:

    li th:each="item, stat : ${roles}">
       <input type="checkbox" th:field="*{userRole[__${stat.index}__]}" th:value="${item}" />
       <label th:text="${item.role}">Test</label>
    </li>

我不确定这是否会直接解决您的问题,因为thymeleaf有问题,只是“添加”一个对象到一个列表。Thymeleaf通常与基本类型(如字符串和整数)一起工作。但至少我指出了你的问题所在。试着把这个弄得乱七八糟的。试试用这行来代替,至少这肯定管用:

 <input type="checkbox" th:field="*{userRole[__${stat.index}__].role}" th:value="${item.role}" />
 类似资料:
  • 问题内容: 我在将表单回发到控制器时遇到很多困难,该表单应该仅包含用户可以编辑的对象的数组列表。 表单可以正确加载,但是在发布时,似乎从未实际发布过任何内容。 这是我的表格: 上面的工作正常,它可以正确加载列表。但是,当我POST时,它返回一个空对象(大小为0)。我相信这是由于缺少造成的,但是无论如何这里是控制器POST方法: 我尝试添加一个,但是无论我做什么,都会导致异常。 我试过了: 我无法访

  • 我很难将表单发回控制器,因为它应该只包含用户可以编辑的对象的arraylist。 表单加载正确,但在发布时,它似乎从未真正发布任何内容。 这是我的表格: 上面的工作正常,它正确加载列表。但是,当我发布时,它返回一个空对象(大小为0)。我认为这是由于缺少,但无论如何,这里有一个控制器POST方法: 我尝试添加一个,但不管我做什么,它都会导致异常。 我试过: 我不能访问当前客户端(编译错误),我甚至不

  • 问题内容: 我有几个复选框: 我想绑定到控制器中的列表,以便每当更改复选框时,控制器都维护所有检查值的列表,例如。 ng-model似乎只能将一个复选框的值绑定到控制器中的变量。 还有另一种方法可以使四个复选框绑定到控制器中的列表吗? 问题答案: 有两种方法可以解决此问题。使用简单数组或对象数组。每个解决方案都有其优缺点。您会在下面找到每种情况的一种。 用简单的数组作为输入数据 HTML可能如下所

  • 我有几个复选框: 我希望绑定到控制器中的一个列表,这样,每当更改复选框时,控制器就会维护所有选中值的列表,例如,。 ng-model似乎只能将一个复选框的值绑定到控制器中的一个变量。 有没有另一种方法可以这样做,以便我可以将四个复选框绑定到控制器中的一个列表?

  • 我有一个包含可能的运输选项列表的实体: 现在,我想将带有thymeleaf的对象绑定到html表单,以便轻松创建/编辑此类实体。 但是如何插入包含所有ShippingTypes的复选框列表并将其绑定到对象?

  • 问题内容: 我想将select元素绑定到对象列表-这很容易: 在这种情况下,似乎是一个数字-所选项目的ID。 但是,我实际上想绑定到country对象本身,所以它是对象,而不仅仅是id。我试图像这样更改选项的值: 但这似乎不起作用。它似乎在我的对象中放置了一个对象,但是没有放置我期望的对象。您可以在我的Plunker示例中看到这一点。 我还尝试绑定到change事件,以便可以根据所选的id自己设置