【问题标题】:Spring MVC form:checkbox not workingSpring MVC 表单:复选框不起作用
【发布时间】:2014-01-21 17:18:11
【问题描述】:

我遇到了 Spring form:checkbox 标签的问题。

我目前有一个带有form:checkbox 标签绑定到Java boolean 字段的JSP 页面。当我在复选框中打勾并提交表单时,值为false

这是我的 JSP 上的复选框:

<form:checkbox id="field_termsandconditions" path="agreeTermsAndConditions" />

我的GET 控制器:

@RequestMapping(value = "/page1.htm", method = RequestMethod.GET)
public String getPage(HttpServletRequest request, ModelMap model) {
    model.addAttribute("MyObject", new MyObject());
    return getURL(request);
}

我的POST 控制器:

@RequestMapping(value = "/page1.htm", method = RequestMethod.POST)
public String processPage(HttpServletRequest request,
    HttpServletResponse response,
    ModelMap model,
    MyObject myObject,
    BindingResult bindingResult) {

        System.out.println(myObject.isAgreeTermsAndConditions);
}

myObject.isAgreeTermsAndConditions 在遇到POST 控制器时始终为false,即使已选中!

有什么想法吗?

【问题讨论】:

  • 不知道 spring-mvc 是如何工作的,但是在 HTML 中复选框的字符串值为 ON 或 OFF,因此您需要从字符串值映射到布尔值。

标签: forms jsp spring-mvc checkbox binding


【解决方案1】:

这可能有点迟回答,但也许它会帮助其他人。

当您为布尔值自动生成 getter 和 setter 时,通常会生成不带“is”前缀的方法。

例如,在上述情况下,为“isAgreeTermsAndConditions”属性生成的设置器可能如下:“setAgreeTermsAndConditions()”,请注意该方法中没有“is”前缀。吸气剂也是如此。

由于使用属性 getter 和 setter 名称查找并绑定到模型属性,如果属性名称和 getter/setter 不匹配,复选框可能不会显示在 UI 上或无法正常工作。

确保属性“isAgreeTermsAndConditions”具有以下 getter/setter 方法名称:getIsAgreeTermsAndConditions()/setIsAgreeTermsAndConditions(...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 2012-07-04
    • 2020-04-27
    • 2014-02-24
    • 2014-03-30
    • 2017-10-11
    相关资源
    最近更新 更多