数据绑定和格式化

数据绑定流程

1.mvc主框架将ServletRequest对象及目标方法入参实例传递给WebDataBinderFactory实例

以创建DataBinder实例对象

2.DataBinder调用装配在Springmvc上下文中的ConversionService组件进行数据类型转换。

数据格式化工作。将Servlet中的请求信息填充到入参对象中

3.调用Validate组件对已经绑定的请求消息入参对象进行数据合法性校验,并最终生成数据绑定

结果BindingData对象

4.Springmvc抽取BindingResult中入参对象和校验错误对象,将它们赋给处理方法的响应入参



 

package com.hous.crud.converter;

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import com.hous.crud.bean.Department;
import com.hous.crud.bean.Employee;

@Component
public class EmployeeConverter implements Converter<String, Employee> {

	@Override
	public Employee convert(String source) {
		if(source != null) {
			String[] values = source.split("/");
			//hous/me@125.com/1/103
			if (values != null && values.length == 4) {
				String lastName = values[0];
				String email = values[1];
				Integer gender = Integer.parseInt(values[2]);
				Department department = new Department();
				department.setId(Integer.parseInt(values[3]));
				Employee employee = new Employee(null, lastName, email, gender, department);
				return employee;
			}
		}
		return null;
	}

}

 

	<mvc:annotation-driven conversion-service="conversionService"/>
	<!-- 将自定义的转换器注册到springmvc上下文中 -->
	<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
		<property name="converters">
			<set>
				<ref bean="employeeConverter"/>
			</set>
		</property>
	</bean>

 

	<form action="emp/add" method="post">
		<input name="employee" type="text" value="hous/me@125.com/1/103">
		<input type="submit" value="提交"/>
	</form>

@RequestMapping(value={"/emp","/emp/add"}, method=RequestMethod.POST)
	private String add(Employee employee){
		employeeDao.save(employee);
		return "redirect:/list";
	}

 

@InitBinder

由@InitBinder标识的方法,可以对WebDataBinder对象进行初始化。

WebDataBinder是DataBinder的子类,用来完成由表单字段到JavaBean属性绑定

@InitBinder方法不能有返回值,必须声明为void

@InitBinder方法参数通常是WebDataBinder

	@InitBinder
	public void initBinder(WebDataBinder dataBinder) {
		dataBinder.setDisallowedFields("lastName");
	}

 

关于mvc:annotation-driven

<mvc:annotation-driven/>会自动注册

RequestMappingHandlerMapping,

RequestMappingHandlerAdapter,

ExceptionHandlerExceptionResolver三个bean

还提供以下支持:

-支持ConversionService实例对表单参数进行类型转换

-支持使用@NumberFormat、@DataTimeFormat注解完成数据类型的格式化

-支持使用@valid注解对JavaBean实例JSR303验证

-支持使用@RequestBody和@ResponseBody注解

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值