【问题标题】:How to get all values from checked boxes in HTML form and attribute them to a field如何从 HTML 表单中的复选框中获取所有值并将它们归因于一个字段
【发布时间】:2015-05-12 01:15:48
【问题描述】:

我正在尝试使用 spring + thymeleaf 创建一个新用户。

我的模型是这样的:

class Person {
    String name;
    int preferences;
}

class Preferences {
    public static final int no_preferences_checked = 0;
    public static final int receive_newsletter = 1;
    public static final int receive_notification_of_new_jobs = 2;
    public static final int show_email_to_everyone = 4;
    public static final int show_skype_to_everyone = 8;
}

在 HTML 表单中,用户将看到 4 个复选框(一个对应于上述 Preferences 类中的每个可能值。

Person 类的首选项字段是用户明确选中的复选框值的总和。

例如,如果用户同时检查了 receive_newsletter 和 show_email_to_everyone,则首选项字段必须为 5。

编辑:我想我并不清楚我的问题。让我改写一下:

我不知道如何编写HTML表单,以便Spring会自动创建Person类,所有数据填写在负责接收帖子的方法中。

当不涉及复选框时,很容易获得 Spring 生成的模型(我遵循了这个 tutorial 并且一切正常),但是一旦我开始使用复选框,它就不再对我有用了。字段首选项永远不会被填写。

有什么建议吗?

【问题讨论】:

  • 将 INT 分配给您的偏好字段的目的是什么?您是否将这些值用于进一步处理?
  • 只需将复选框发送到服务器并在那里进行计算......虽然我可能会为属性创建单独的布尔值。为您节省大量从 int 转换到 int 的麻烦。
  • @Aeseir 不是有很多字段来处理每个首选项,而是使用 int 给我相同的信息,只需对其应用 OR 操作即可。此外,新首选项不需要添加新字段。
  • 最佳实践是预先编写更多代码,为成功做好准备。是的,这意味着要捕获和管理更多字段,但是如果您需要敏捷并编辑这些字段,您可以更快地不影响业务流程或表单中的其他字段。如果您按照计划进行合并,则对业务逻辑的任何细微更改都会导致对开发和 QA 进行大量再投资。

标签: spring spring-mvc checkbox thymeleaf


【解决方案1】:

我认为,实现这种特殊情况的一种方法是,您需要使用/使用 javascript。

我的建议:

创建一个javascript文件,在这个文件中你有一个checkbox监听器

$(':checkbox').change(function() {
    var sum = 0;
    // Your Code
    $('#preferences').val(sum);
});

在此方法中,您检查选中了哪个复选框并读取选中的复选框的值。计算这些值并将计数值分配给您的preferences 输入。 可以隐藏此输入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    • 2014-04-14
    • 2014-07-04
    • 1970-01-01
    相关资源
    最近更新 更多