2

我正在使用 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
}

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

4

2 回答 2

3

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

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

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

于 2012-12-30T02:33:18.707 回答
1

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

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

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

于 2013-01-02T16:20:57.883 回答