• 每天学点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注解的入参只是经过数据转换的中间产物,瞎想的,如果有误,麻烦留言更正

  • 相关阅读:
    OC中Foundation框架之NSDictionary、NSMutableDictionary
    【03_136】Single Number
    【算法】QuickSort
    【02_258】Add Digits
    【01_292】Nim Game
    做题过程中得到的注意点
    No.02——第一次使用Android Studio,并创建出Hello World
    No.01——配置编程环境
    一个好用的代码分享网站
    【数据结构】某些难理解点
  • 原文地址:https://www.cnblogs.com/xpawn/p/7582361.html
Copyright © 2020-2023  润新知