`
goodluck_wgw
  • 浏览: 96181 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

springMVC之form表单同名数据绑定

阅读更多

前几天在论坛中看到有很多人说springmvc中,如果前台form表单有相同的属性名,比如

<input name="student.name"/>

<input name="class.name"/>

如果在struts2中提供对应javabean的Get/set方法就可以解决

在springmvc 的@Controller中不行,当然你可以提供一个formBean,比如 class FormBean {

Student student;

Classes classes;

}

,可以解决这个问题。

其实springmvc本身也提供对这种方式的绑定(参考一个朋友的回答)

springmvc 源码中有一个WebDataBinder类,属性fieldDefaultPrefix就是解决上面问题的,取之注释

/**
     * Specify a prefix that can be used for parameters that indicate default
     * value fields, having "prefix + field" as name. The value of the default
     * field is used when the field is not provided.*/

因此可以在springMVC的Controller中如下使用:

@InitBinder("user") 
    public void initBinder(WebDataBinder binder) { 
           // binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
            binder.setFieldDefaultPrefix("user.");//别名前缀
    }


   
    @InitBinder("student") 
    public void initBinder1(WebDataBinder binder) { 
          // binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
            binder.setFieldDefaultPrefix("student.");//别名前缀
    }

 

 

@RequestMapping(value="/new")
    public String _new(ModelMap model, Student student,@ModelAttribute("bb")User user) throws Exception {
        //model.addAttribute("student",);
        System.out.println(user.getId());
        System.out.println(student.getName());
        System.out.println(user.getName());
        return "/user/form_include";
    }

代码说明:在initBinder和initBinder1中进行数据前缀的绑定,和form表单中前缀名的相同,比如student.

然后在_new方法中springmvc会进行绑定,详细见WebDataBinder源码

protected void checkFieldDefaults(MutablePropertyValues mpvs) {
        if (getFieldDefaultPrefix() != null) {此处得到的是前缀比如student.
            String fieldDefaultPrefix = getFieldDefaultPrefix();
            PropertyValue[] pvArray = mpvs.getPropertyValues();此处得到的是form表单的参数,比如student.name之类的
            for (PropertyValue pv : pvArray) {
                if (pv.getName().startsWith(fieldDefaultPrefix)) {
                    String field = pv.getName().substring(fieldDefaultPrefix.length());此处的得到具体属性名
                    if (getPropertyAccessor().isWritableProperty(field) && !mpvs.contains(field)) {
                        mpvs.add(field, pv.getValue());得到的属性名放假map
                    }
                    mpvs.removePropertyValue(pv);//移除掉,比如student移除掉
                }
            }
        }
    }

 

分享到:
评论
2 楼 LinApex 2014-12-02  
awm96 写道
这个binder.setFieldDefaultPrefix,本来是有其他用途的,spring源码中说是用来处理如checkbox没有选中时,就取该prefix+field名的参数做为默认值。
楼主这么实现,虽然也能用,但感觉怪怪的,毕竟不是最正规的写法。
感觉可以通过自定义WebDataBindler,重写doBind方法来实现类似于struts2那种bean.field的绑定方式,这应该才是正规途径。


灵活运用嘛
1 楼 awm96 2013-09-07  
这个binder.setFieldDefaultPrefix,本来是有其他用途的,spring源码中说是用来处理如checkbox没有选中时,就取该prefix+field名的参数做为默认值。
楼主这么实现,虽然也能用,但感觉怪怪的,毕竟不是最正规的写法。
感觉可以通过自定义WebDataBindler,重写doBind方法来实现类似于struts2那种bean.field的绑定方式,这应该才是正规途径。

相关推荐

    springmvc-form表单的使用

    - 用户填写完表单并提交后,Spring MVC会自动将表单数据绑定到相应的POJO对象中。在Controller中,可以通过方法参数来接收这些数据。例如,可以定义一个接受`MyPojo`类型参数的方法来处理提交的数据。 ```java @...

    SpringMVC入门很简单之数据绑定(下)

    在本篇中,我们将深入探讨SpringMVC框架中的数据绑定,这是Java开发中一个至关重要的概念,尤其是在构建Web应用程序时。SpringMVC是Spring框架的一部分,它为开发RESTful服务和传统的表单提交提供了强大的支持。数据...

    SpringMVC入门很简单之数据绑定(上)

    在本文中,我们将深入探讨SpringMVC框架中的数据绑定,这是Spring MVC开发中不可或缺的一部分,尤其是在处理用户输入和展示响应时。数据绑定是将HTTP请求参数与Java对象的属性关联的过程,极大地简化了Web应用程序的...

    基于注解的springmvc进行form表单操作

    本篇文章将深入探讨如何使用注解来实现在Spring MVC中处理form表单的数据,以及如何将这些数据保存到MySQL数据库。 首先,让我们了解一下Spring MVC的核心组件和注解。Spring MVC是一个模型-视图-控制器(MVC)架构...

    springmvc-demo05-数据绑定(接受参数).zip

    在这个名为"springmvc-demo05-数据绑定(接受参数)"的项目中,我们将深入探讨Spring MVC如何实现这一特性。 1. **数据绑定的基本概念** 数据绑定是将用户输入或者HTTP请求参数自动映射到Java对象的属性上的过程。...

    SpringMVC表单标签进行数据绑定(图书管理)Demo

    首先,Spring MVC中的表单标签是基于JSP标准标签库(JSTL)的,特别是`&lt;form:form&gt;`和`&lt;form:input&gt;`等标签,这些标签增强了对数据绑定的支持。通过使用这些标签,我们可以简化视图层与控制器之间的交互。 1. **...

    SpringMVC数据绑定及数据类型转换

    **数据绑定**是SpringMVC中的一种机制,允许我们将用户通过表单或其他方式提交的请求参数自动绑定到控制器中的方法参数或者模型对象的属性上。这种绑定过程极大地简化了开发者的工作,无需手动从请求中获取每个参数...

    SpringMVC之表单提交===③===多文件上传表单

    在处理文件上传时,Spring MVC使用了`CommonsMultipartResolver`,这是Apache Commons FileUpload库的一个适配器,可以处理multipart/form-data类型的表单数据,即文件上传。 要实现多文件上传,我们需要在HTML表单...

    扩展SpringMVC以支持更精准的数据绑定1

    在“扩展SpringMVC以支持更精准的数据绑定1”这个主题中,博主探讨了如何通过自定义转换器和验证器来增强Spring MVC的数据绑定能力,以满足更为复杂的应用场景。 首先,我们要了解Spring MVC的数据绑定基础。在默认...

    SpringMVC入门很简单之表单标签

    6. **数据绑定与验证**:SpringMVC支持数据绑定,即自动将表单提交的数据映射到Java对象的属性上。同时,可以使用JSR-303/JSR-349提供的注解进行数据验证,如`@NotBlank`、`@Size`等。 7. **处理器适配器...

    springmvc 参数绑定例子1

    - **ModelAttribute**:当表单数据对应于一个复杂对象时,可以使用`@ModelAttribute`注解,Spring MVC会自动将请求参数映射到对象属性。 ```java @PostMapping("/saveUser") public String saveUser(@...

    Springmvc前后台数据数组绑定

    Springmvc前后台数据数组绑定,list超过了256时,会报错,如何解决?该文给出了说明

    SSM(Spring+SpringMVC+MyBatis)多数据源配置框架

    它简化了模型-视图-控制器(Model-View-Controller,MVC)的实现,负责处理HTTP请求,将数据绑定到模型,渲染视图,并与Spring的其他组件无缝集成。 **MyBatis** 是一个SQL映射框架,它允许开发者编写自定义的SQL...

    SpringMVC数据绑定入门.rar

    在这个“SpringMVC数据绑定入门”压缩包中,你将找到一系列资源来帮助你理解并掌握SpringMVC的数据绑定机制,这对于任何Java开发者来说都是一个重要的技能。 1. **SpringMVC概述**: SpringMVC作为Spring框架的一...

    SpringMVC表单标签简介

    `&lt;form:form&gt;` 标签是SpringMVC表单标签中最常用的一个,它有两大主要功能:一是可以自动绑定表单数据到一个特定的对象;二是支持使用除GET和POST之外的HTTP方法(如DELETE、PUT)提交表单数据。 ###### 1.1 绑定...

    SpringMVC实现数据绑定及表单标签

    SpringMVC实现数据绑定及表单标签 SpringMVC是一款基于Java的Web应用框架,它提供了很多有用的功能,包括数据绑定和表单标签。数据绑定是将用户输入绑定到领域模型的一种特性,可以自动进行格式转换,减少开发者的...

    Spring In Action SpringMVC 提交表单

    总结,SpringMVC提供了一套完整的解决方案来处理表单提交,从接收请求到数据验证,再到视图呈现,整个过程简洁高效。理解并熟练运用这些概念和机制,能帮助开发者构建出更加健壮和可维护的Web应用。在实际开发中,应...

    SpringMVC 数据绑定实例详解

    在 SpringMVC 中,数据绑定是一项关键特性,它允许开发者将 HTTP 请求参数或者表单数据自动映射到控制器方法的参数上,简化了处理用户输入的过程。本篇将深入讲解 SpringMVC 数据绑定的实例详解。 SpringMVC 的数据...

    SpringMVCr接收表单bean示例

    `SpringMVC接收表单bean示例`是一个具体的应用场景,它演示了如何使用Spring MVC来优雅地处理前端提交的表单数据,并通过Java Bean进行封装。在这个示例中,结合了Spring MVC与Hibernate,提供了一个完整的后端数据...

Global site tag (gtag.js) - Google Analytics