使用Spring MVC控制器处理和验证HTML复选框

时间:2012-12-30 00:43:20

标签: java html spring-mvc thymeleaf

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

@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
}

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

2 个答案:

答案 0 :(得分:2)

解决方案A:有点丑,但速度最快:从RequestMapping中删除params,只需使用request.getParameter(“agree_tos”)来检查此参数。

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

解决方案C:使用defaultValue和required = false的@RequestParam可能允许在一个方法中执行这两种情况

答案 1 :(得分:1)

您不必担心禁用时未传递复选框。 Spring MVC为您做到了这一点,Thymeleaf为它提供了足够的基础设施。如果表单支持bean(在Spring MVC术语中也称为命令)具有布尔字段,则可以将其映射到复选框而不用担心。

每当在Spring MVC应用程序中使用input type="checkbox"(无论是JSP还是百里香)时,都会在引擎盖之后添加input type="hidden",以便控制器层完全能够区分在禁用或未选中的字段之间。

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