zoukankan      html  css  js  c++  java
  • Spring MVC框架:第十三章:类型转换

    SpringMVC将“把请求参数注入到POJO对象”这个操作称为“数据绑定”。
    数据类型的转换和格式化就发生在数据绑定的过程中。
    类型转换和格式化是密不可分的两个过程,很多带格式的数据必须明确指定格式之后才可以进行类型转换。
    最典型的就是日期类型。

    1.使用SpringMVC内置的类型转换器
    ①配置MVC注解驱动

    <mvc:annotation-driven/>
    

    ②在需要进行转换的字段上标记特定的注解

    @DateTimeFormat(pattern="yyyy-MM-dd")
    private Date birthday;
    @NumberFormat(pattern="#,###,###.#")
    private double salary;
    

    2.转换失败后处理
    ①BindingResult

    SpringMVC在捕获到类型转换失败错误时会将相关信息封装到BindingResult对象传入到目标handler方法中。

    //Return if there were any errors.
    boolean hasErrors();
    

    在handler可以通过hasErrors()方法判断是否有错误。如果有则跳转到指定的页面。当然如果有需要也可以获取其他相关信息。

    使用BindingResult检测绑定失败错误

    @RequestMapping("/convert")
    public String convertFail(Employee employee, BindingResult bindingResult) {    	
    	//检测是否存在“数据绑定”错误
    	boolean hasErrors = bindingResult.hasErrors();
    	if(hasErrors) {    		
    		return "error";    		
    	}    	
    	System.out.println(employee);    	
    	return "target";
    }
    

    ※千万注意:这里传入Employee和BindingResult这两个参数时中间不能有别的入参声明。
    ②页面显示

    [1]要借助SpringMVC的form:form标签

    [2]在form:form标签中要明确指定modelAttribute属性。

    [3]使用form:errors标签,通过path属性指定要显示错误消息的属性名

    在页面上结合SpringMVC的表单标签显示错误消息

    <form:form modelAttribute="employee">
    	<form:input path="age"/><form:errors path="age"/>
    </form:form>
    

    自动的类型转换
    HTTP协议本身是无类型的,请求体、响应体传输的数据都是字符串。
    String ageFromRequest = request.getParameter(“age”)
    SpringMVC框架为了帮助我们简化开发在底层为我们实现了自动的类型转换
    @RequestParam(“age”) Integer ageFromAnnotaion
    使用想要的类型接收即可
    ※当然,如果转换失败,也会返回错误页面400

    3.自定义类型转换器
    ①Converter<S,T>接口

    自定义类型转换器要实现Converter<S,T>这个接口
    ②配置FormattingConversionServiceFactoryBean

    在FormattingConversionServiceFactoryBean的converters属性中配置自定义类型转换器的全类名

    <bean id="conversionServiceFactoryBean" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="com.mvc.converters.EmpConverter"/>
            </set>
        </property>
    </bean>
    

    ③配置mvc:annotation-driven

    <mvc:annotation-driven conversion-service="conversionServiceFactoryBean"/>
    
  • 相关阅读:
    解决win7和win8的64位系统安装NetAdvantage时总是提示%SystemDriver%inetpub\wwwroot错误的方法
    如何使VS2008 调试网站的根目录和IIS调试的一致?
    设置网站默认目录
    asp.net网站未能加载文件或程序集或它的某一个依赖项。拒绝访问
    HTML5 :Canvas之基本用法
    HTML5 Canvas之图片引用
    python虚拟环境的介绍和创建
    基于jTemplates、ascx协同工作的酷UI模板技术
    我的.Subtext二次开发之路系列:无限层次分类
    我的.Subtext二次开发之路系列:引言
  • 原文地址:https://www.cnblogs.com/javawxid/p/12812063.html
Copyright © 2011-2022 走看看