zoukankan      html  css  js  c++  java
  • 每天学点SpringMVC-数据绑定以及格式化

    1. springmvc的数据绑定流程

    如图,根据request参数和方法入参会生成一个DataBinder对象,然后会由ConversionService进行数据类型转换以及Validator进行数据校验最终生成BindingResult对象

    (反正是这个意思吧,:-D)

    2. 自定义数据转化器

      2.1 编辑自定义转换器并实现Converter接口

    /**
     * Created by pawn on 2017/9/23.
     */
    @Component
    public class EmployeeConvertor implements Converter<String,Employee> {
    
        @Autowired
        DepartmentDao departmentDao ;
    
        @Override
        public Employee convert(String s) {
            //GG-gg@pawn.com-1-1
            if(s != null){
                String[] vals = s.split("-") ;
                if(vals != null || vals.length == 4){
                    String lastName = vals[0] ;
                    String email = vals[1] ;
                    int gender = Integer.parseInt(vals[2]) ;
                    int departmentId = Integer.parseInt(vals[3]) ;
                    Department department = departmentDao.getDepartment(departmentId);
                    return new Employee(null,lastName,gender,email,department) ;
                }
            }
            return null;
        }
    }

     2.2 spring-mvc中进行配置

     <mvc:annotation-driven conversion-service="conversionServiceFactoryBean"></mvc:annotation-driven>
    
        <bean id="conversionServiceFactoryBean" class="org.springframework.context.support.ConversionServiceFactoryBean">
            <property name="converters">
                <set>
                    <ref bean="employeeConvertor"></ref>
                </set>
            </property>
        </bean>

     2.3 编写目标方法使用

    @RequestMapping(value = "/savewithstring.do")
        public String savaWithString(@RequestParam("employee") Employee employee){
            System.out.println("=========>Save");
            employeeDao.save(employee) ;
            return "redirect:../page/emp/list.do" ;
        }

      2.4 EmployeeConverter转换器会将string类型参数转换为Employee对象,有一点不明白的是,之前提到的目标方法参数没有@RequestParam注解,但是表单里面的各个字段能自动填充到Employee对象中,如果有大神能看到,求帮忙留言解惑!

    3. <mvc:annotation-driven>作用

    原理一窍不通,不过我想的是这个注解一定要加上,否则估计会生成很多奇怪的问题

    4 . @InitBinder注解

    5. 数据格式化

       5.1 保证spring-mvc.xml中有<mvc:annotation-driven>注解

            自定义conversion-service时需要使用 FormattingConversionServiceFactoryBean

       5.2 在目标属性中添加@DateTimeFormat和@NumberFormat等注解

       5.3 个人理解: 目标方法的入参如果有@ModelAttribute注解应该和无注解一样,是已经经过数据转换、数据绑定以及数据格式化后的最终产物,而加了@RequestParm注解的入参只是经过数据转换的中间产物,瞎想的,如果有误,麻烦留言更正

  • 相关阅读:
    如何去重一个Oracle表
    配置Eclipse来开发Java 程序
    在windows上使用opera mini
    Oracle OLAP 介绍
    一个Batch作业调度系统构思
    how to Use Subversion with TortoiseSVN
    java official Design Pattern
    how to install ubuntu OS combined with Windows
    确保DWBI项目成功的几个关键点
    spinner 读取sqlite
  • 原文地址:https://www.cnblogs.com/xpawn/p/7582361.html
Copyright © 2011-2022 走看看