Thymeleaf 复选框未传递值

2024-01-26

两个问题。

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

截屏:

html

<div class="container">
<div class="row">
        <div class="col-sm-6">
              <table class="table table-hover">
                <thead>
                  <tr>
                    <th>Id</th>
                    <th>Username</th>
                    <th>First name</th>
                    <th>Last name</th>
                    <th>Password (Hash)</th>
                    <th>Role</th>
                    <th>Notes</th>
                    <th>Select</th>
                  </tr>
                </thead>
                <tbody>
                  <tr th:each="u : ${listOfUsers}">
                    <td th:text="${u.id}"></td>
                    <td th:text="${u.username}"></td>
                    <td th:text="${u.firstName}"></td>
                    <td th:text="${u.lastName}"></td>
                    <td th:text="${#strings.substring(u.password,0,5) +'...'}"></td>
                    <td th:text="${u.role}"></td>
                    <td th:text="${u.notes}"></td>     
                    <td><input type="checkbox" name="mycheckbox" 
                     th:value="*{u.isUserChecked()}" th:checked="${u.isUserChecked()}"  /></td>
                  </tr>
                </tbody>
              </table>

            <form th:action="@{/users}" method="post">
                <button class="buttonLogin" type="submit">Submit</button>
            </form>
        </div>
  </div>

UPDATE 1

正如 @Metroids 提到的第一个问题可以通过以下方式解决:

<td><span th:each="note, i: ${u.notes}" th:text="${(i.index > 0 ? ', ' : '') + note.id}" /></td>

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

<tr th:each="u, i : ${userWrapper}">
<!-- other rows removed for readability -->
<td><input type="checkbox" th:field="*{listOfUsers[__${i.index}__].userChecked}" /></td>

我需要带有属性的 UserWrapper 类List<User> listOUsers。但如何做到这一点呢? 我创建了这样的东西:

@Component
public class UserWrapper {

@Autowired
UserService userService;

List<User> listOfUsers = userService.findAll();

public List<User> getListOfUsers() {
    return listOfUsers;
}

public void setListOfUsers(List<User> listOfUsers) {
    this.listOfUsers = listOfUsers;
}
}

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

@Controller
public class UserController {

@Autowired
UserService userService;

@Autowired 
UserWrapper userWrapper;

@RequestMapping("/users")
public String home(Model model){
    List<User> 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

UPDATE 2

用户控制器:

@Controller
public class UserController {

@Autowired
UserService userService;

@Autowired
UserWrapper userWrapper;

@RequestMapping("/users")
public String home(Model model){
    List<User> 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());
        }
    }
}

Result:

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 方法时,我的用户 Wrap 列表没有值。我正在尝试复制

List<User> listOfUsers = userService.findAll(); userWrapper.setListOfUsers(listOfUsers);

到 POST 方法,但存在情况:用户名:确定,已检查?:不监听鼠标单击复选框(所有值均为 false)。


对于列出每个笔记的 id,您需要添加另一个循环。例如,代替

<td th:text="${u.notes}"></td>

你需要类似的东西。

<td><span th:each="note, i: ${u.notes}" th:text="${(i.index > 0 ? ', ' : '') + note.id}" /></td>

--

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

  • 所有复选框都必须位于<form></form> tags.
  • 您需要一个具有用户列表作为属性的命令对象...我认为您不能使用 java List 作为命令对象。需要将其指定为 th:object<form> tag.
  • 实际复选框的 html 应如下所示:

HTML

<form th:action="@{/users}" th:object="${userWrapper}" method="post">
    <!-- other html removed for readability -->
    <tr th:each="u, i : ${listOfUsers}">
        <!-- other rows removed for readability -->
        <td><input type="checkbox" th:field="*{users[__${i.index}__].userChecked}" /></td>
    </tr>
</form>

控制器

@Controller
public class UserController {

    @Autowired UserService userService;

    @RequestMapping("/users")
    public String home(Model model){
        List<User> 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<User> listOfUsers = new ArrayList<>();

    public List<User> getListOfUsers() {
        return listOfUsers;
    }

    public void setListOfUsers(List<User> listOfUsers) {
        this.listOfUsers = listOfUsers;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Thymeleaf 复选框未传递值 的相关文章

随机推荐

  • 通过 hilt 中的不同具体类绑定接口?

    我用希尔特 我有一个接口 但我有两个实现它们的类 我需要在 ViewModels 中实现不同的 Bind 接口 请帮助我 创建自定义组件 或使用自定义范围 您提供的代码会有所帮助 但让我们假设 您的界面 interface YourInte
  • 如何将图标和文本段落放在一行中?

    我想将我的字体很棒的图标和文本段落放到一行中 我该如何修复此代码 div class date style display inline block i class fa fa user o i p style display inline
  • Maven 3 - 值得吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 是否有可能获得一个 .xib 窗口到选项卡式故事板

    我没有很长时间编写代码 Xcode 所以我有点垃圾 基本上我已经创建了一个 xib 并希望它出现在故事 板中 但我真的不知道从哪里开始 因为我有一个 xib 窗口具有UITableView and UIPickerView其中所有代码在 x
  • 将带标签的 pandas DF 写入 influxdb

    我有这个 3526 rows x 5 columns DF 其中col0是时间 col1 col3是标签和col4是我的价值 0 1 2 3 4 0 2017 09 29 22 41 51 10 2 95 5 C1195 LF470 SAR
  • JavaScript通过点击改变当前元素的颜色

    我有一个关于仅更改当前元素的颜色的问题 所以我想通过每次点击来更改当前元素的背景颜色 我的问题是 我无法重置前一个元素的背景颜色 例如 我这里有两种背景颜色 黄色 浅蓝色 如果我单击 旧 div 和 新 div 则两个 div 的背景颜色变
  • 将代码字符串转换为 hive 中的 desc

    这里我们有一个连字符的字符串 例如0 1 3 并且长度不固定 hive 中还有一个 DETAIL 表来解释每个代码的含义 DETAIL code desc 0 AAA 1 BBB 2 CCC 3 DDD 现在我们需要一个 hive 查询来将
  • 如何从 DIV 重定向并绕过子锚点 href

    请我需要您的帮助来完成下面的代码 我想向整个 DIV 添加 onclick 事件以重定向到 url 但我无法绕过 DIV 内子锚点中包含的 href 即 目标是点击图像或文本上的任意位置重定向到 google com div div a h
  • 未找到带有 SQLalchemy 数据库的 PostgreSQL

    我使用以下代码使用 sqlalchemy 创建 postgresql 数据库 engine create engine postgresql psycopg2 postgres localhost testData Base metadat
  • 对于自动返回类型,使用哪种更好: decltype 或 std::common_type<>::type (如果可能)?

    作为对我的回答最后一个问题 https stackoverflow com questions 11052842 error with using decltype in c11 creating opaque error message
  • 爱尔兰 Eircode 验证

    我想知道是否有验证爱尔兰 Eircode 格式的最佳实践 到目前为止 我在 JavaScript 中使用 REGEX 的最佳尝试是基于第 11 页上的官方规范here https www eircode ie docs default so
  • Apache Poi excel 删除空白行

    我有一个 3000 行的 Excel 文件 我删除了2000 使用ms excel应用程序 但是当我从代码中调用sheet getLastRowNum 时 它给了我3000 而不是1000 我如何删除空白行 我尝试了来自的代码here ht
  • IIS 7 Cors Ajax Soap 请求

    我遇到了一个无法解决的问题 我有一些 js jquery POST Soap 通过 PHP 请求代码在 Apache 上工作 启用了 Cors 来调用 HTTPS 并且工作正常 我已经迁移到 IIS7 设置响应标头 Access Contr
  • 在 PowerShell 中使用另一个扩展 JSON

    是否有一些简单的方法可以将一个 JSON 文件扩展为另一个文件 并使用 PowerShell 将输出保存到另一个文件 目前我正在尝试编写一个允许我做到这一点的循环函数 但也许有一个更简单的解决方案 迭代转换为 JSON 的属性PSCusto
  • 角度 Ui 树递增是重复的

    我的笨蛋 https plnkr co edit dlG6bJcBP8jaxhVEZ4wq p preview 在 My plunker 中 如果我添加一些子记录 那么如果我删除其中一个子记录 那么如果我添加行 则行会重复 scope ne
  • 将数据从 Android 发送到 PHP 服务器

    我在 android 中有一个应用程序 我想通过 url like mydata php lat 76867 long 87979 我有 php 代码 如果点击此 url 则将数据保存在数据库中 我所不知道的是如何通过我的android手机
  • 在 ASP.NET 中使用线程是否存在任何不明显的危险?

    这是一个兄弟姐妹的问题这个程序员的问题 https softwareengineering stackexchange com questions 13711 servicing background tasks on a large si
  • 设置elasticsearch php客户端的connect_timeout

    我想在我的elasticsearch php 客户端到我的elasticsearch 服务器之间配置一个小的超时 我尝试将一些参数传递给 guzzle 客户端 但似乎这不起作用 这是代码 params array params hosts
  • 如何在appdelegate中关闭viewcontroller?

    我为这样的暂停视图创建launchScreen func applicationWillResignActive application UIApplication let storyboard UIStoryboard name Main
  • Thymeleaf 复选框未传递值

    两个问题 我有用户和注释课程 用户可以有很多笔记 如何通过 Thymeleaf 显示属于用户的每个笔记 id th text u notes id 不起作用 我有一个表格 见图 其中每个用户都有布尔 isUserChecked 值的复选框