【问题标题】:Handling and validating HTML checkbox with Spring MVC controller使用 Spring MVC 控制器处理和验证 HTML 复选框
【发布时间】:2012-12-14 18:26:57
【问题描述】:

我正在使用 Spring MVC,我想要一个页面来注册我的用户。我想给他们接收电子邮件通知的选项,我有一些他们必须接受的服务条款,所以有两个复选框。我受到 HTML 复选框的限制,因为我还使用 thymeleaf 作为我的模板引擎。我想知道您将如何处理和验证复选框的值,无论它们是否被选中。当您使用复选框进行表单提交时,如果选中它们,则将值作为复选框的名称-值对传递给服务器,否则不传递任何内容。你有不同的处理方法,如下所示:

@RequestMapping(value = "/register, 
method = RequestMethod.POST, 
params = {"notify", "agreed_tos"})
public String register(/* other params like username/email */) {
    //register user
}

@RequestMapping(value = "/register, 
method = RequestMethod.POST)
public String registerMissingToS(/* other params like username/email */) {
    // return that agreed_tos checkbox wasn't checked
}

这样,如果复选框被选中,则调用第一个方法,如果未选中,则调用第二个方法。有没有办法检查是否选中了复选框,以便我可以在单个控制器方法中完成所有这些操作?你会怎么做呢?

【问题讨论】:

    标签: java html spring-mvc thymeleaf


    【解决方案1】:

    您不必担心您的复选框在禁用时不会通过。 Spring MVC 为您完成了这项工作,Thymeleaf 为其提供了足够的基础设施。如果你的表单支持 bean(在 Spring MVC 术语中也称为 command)有一个布尔字段,你可以将它映射到一个复选框,不用担心。

    每当在 Spring MVC 应用程序(无论是 JSP 还是 thymeleaf)中使用 input type="checkbox" 时,都会在其后面添加一个 input type="hidden",以便控制器层能够完美区分字段是禁用或未选中。

    免责声明,根据 StackOverflow 规则:我是 thymeleaf 的作者。

    【讨论】:

    • 我不想在我的 Command 对象中使用布尔复选框,因为它只在控制器级别中需要(如果为 true,则注册帐户,否则通知用户他必须同意)。我可以有一个方法public String doRegistration(@RequestParam("checkbox_name") Object checkboxValue, /*Command Object*/ Account account); 并简单地检查checkboxValue == null 吗? Spring 会找到生成的隐藏输入吗?
    【解决方案2】:

    解决方案 A:有点丑,但最快:从 RequestMapping 中删除参数,然后使用 request.getParameter("agreed_tos") 来检查这个参数。

    解决方案 B:在表单中使用命令对象,因此如果用户将复选框留空并且 SpringMVC 将此输入绑定到命令对象字段,则 thymeleaf 或 spring 标签可以自动添加发送的隐藏输入

    解决方案 C:@RequestParam 可能带有 defaultValue 和 required=false 允许在一种方法中完成这两种情况

    【讨论】:

    • 我正在考虑做 C,但你能扩展 B 吗?我还没有听说过使用命令对象。
    • 检查文档:Thymeleaf + Spring 3 -> thymeleaf.org/documentation.html 上的第 6 章/本章中的示例很复杂,在您的情况下要简单得多/
    猜你喜欢
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 2014-02-04
    • 1970-01-01
    相关资源
    最近更新 更多