Thymeleaf复选框没有传递值

两个问题。

  1. 我有User和Note课程。 用户可以有很多笔记。 如何通过Thymeleaf展示属于用户的每个笔记? th:text =“$ {u.notes.id}”不起作用
  2. 我有一个表(见图),每个用户的复选框都有boolean isUserChecked值,下面是删除已检查用户的按钮。 Thymeleaf正确显示isUserChecked值的状态。 当我手动选中复选框时,删除按钮不起作用,但是当我在代码中设置isUserChecked值时,该按钮有效。 问题在于我的Thymeleaf语法中的这个复选框。

截图:

在此处输入图像描述

HTML

Id Username First name Last name Password (Hash) Role Notes Select

更新1

正如@Metroids提到的第一个问题可以修复:

0 ? ', ' : '') + note.id}" />

第二个问题。 在我的html中使用它:

    

我需要具有属性List listOUsers UserWrapper类。 但是怎么做呢? 我创建了这样的东西:

 @Component public class UserWrapper { @Autowired UserService userService; List listOfUsers = userService.findAll(); public List getListOfUsers() { return listOfUsers; } public void setListOfUsers(List listOfUsers) { this.listOfUsers = listOfUsers; } } 

这是我的这个页面的控制器:

 @Controller public class UserController { @Autowired UserService userService; @Autowired UserWrapper userWrapper; @RequestMapping("/users") public String home(Model model){ List listOfUsers = userService.findAll(); model.addAttribute("listOfUsers", listOfUsers); return "users"; } @RequestMapping(value = "users", method = RequestMethod.POST) public String deleteUser(User user, Model model){ userService.deleteCheckedUser(user); return "redirect:/users"; } } 

在此之后我有错误:

 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController': Unsatisfied dependency expressed through field 'userWrapper'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userWrapper' defined in file [C:\Users\luk89\Desktop\Java\STS Projects\StickyNotes\target\classes\com\twistezo\models\UserWrapper.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.twistezo.models.UserWrapper]: Constructor threw exception; nested exception is java.lang.NullPointerException 

更新2

用户控制器:

 @Controller public class UserController { @Autowired UserService userService; @Autowired UserWrapper userWrapper; @RequestMapping("/users") public String home(Model model){ List listOfUsers = userService.findAll(); userWrapper.setListOfUsers(listOfUsers); for(User u : userWrapper.getListOfUsers()){ System.out.println("username: " +u.getUsername()+ ", checked?: " +u.isUserChecked()); } model.addAttribute("listOfUsers", listOfUsers); model.addAttribute("userWrapper", userWrapper); return "users"; } @RequestMapping(value = "/users", method = RequestMethod.POST) public String deleteUser(@ModelAttribute UserWrapper userWrapper, Model model){ for(User u : userWrapper.getListOfUsers()){ System.out.println("username: " +u.getUsername()+ ", checked?: " +u.isUserChecked()); } userService.deleteCheckedUser(userWrapper); return "redirect:/users"; } } 

从我的服务类中删除方法:

 @Override public void deleteCheckedUser(UserWrapper userWrapper) { for(User u : userWrapper.getListOfUsers()){ if(u.isUserChecked() == true){ this.userDAO.delete(u.getId()); } } } 

结果:

 username: user1, checked?: false username: user2, checked?: false username: user3, checked?: false username: user4, checked?: false username: user5, checked?: false username: asd, checked?: false username: qwe, checked?: false username: xcv, checked?: false username: ghj, checked?: false username: dfh, checked?: false username: n, checked?: false username: ed, checked?: false username: null, checked?: true username: null, checked?: false username: null, checked?: false username: null, checked?: false username: null, checked?: false username: null, checked?: false username: null, checked?: false username: null, checked?: false username: null, checked?: false username: null, checked?: false username: null, checked?: false username: null, checked?: true 

Thymeleaf部分现在很棒,但是当我在控制器中调用POST方法时,我的userWrap列表没有值。 我正在尝试复制

List listOfUsers = userService.findAll(); userWrapper.setListOfUsers(listOfUsers);

POST方法但有情况:用户名:好,检查?:不听鼠标点击复选框(所有值都为假)。

对于列表,您需要添加另一个循环的每个注释的ID。 例如,而不是

  

你需要类似的东西。

  

对于复选框。 你需要做很多改变……

  • 所有复选框都必须位于

    标记内。

  • 您需要一个具有用户列表作为属性的命令对象…我认为您不能使用Java List作为命令对象。 需要将其指定为

    标记上的th:对象。

  • 实际复选框的html应如下所示:

HTML

 

调节器

 @Controller public class UserController { @Autowired UserService userService; @RequestMapping("/users") public String home(Model model){ List listOfUsers = userService.findAll(); UserWrapper userWrapper = new UserWrapper(); userWrapper.setListOfUsers(listOfUsers); model.addAttribute("listOfUsers", listOfUsers); model.addAttribute("userWrapper", userWrapper); return "users"; } @RequestMapping(value = "users", method = RequestMethod.POST) public String deleteUser(@ModelAttribute UserWrapper userWrapper, Model model){ userService.deleteCheckedUser(userWrapper.getListOfUsers()); return "redirect:/users"; } } 

Java的

 public class UserWrapper { List listOfUsers = new ArrayList<>(); public List getListOfUsers() { return listOfUsers; } public void setListOfUsers(List listOfUsers) { this.listOfUsers = listOfUsers; } }