问题提出
接上个博客中的CRUD
现在写一个表单,将员工的信息都提交:value="empAdmin-admin@qq.com-1-101"
<form action="${ctp}/quickadd">
<!--将员工的所有信息都写上-->
<input name="empinfo" value="empAdmin-admin@qq.com-1-101"/>
<input type="submit" value="快速添加"/>
</form>
@RequestMapping(value="/quickadd")
public String quickAdd(@RequestParam("empinfo") Employee employee){
System.out.println(employee);
return "redirect:/emps";
}
发送请求带的数据是:quickadd?empinfo=empAdmin-admin@qq.com-1-101
而@RequestParam("empinfo") Employee employee
就相当于:
Employee employee = request.getParameter("empinfo")
也就是说将提交的参数的值empAdmin-admin@qq.com-1-101
赋值给employee
对象
但是这是一个字符串,明显不行,怎么办呢?我们人可以使用自定义类型转换器
自定义类型装换器
ConversionService:负责类型装换以及格式化功能
ConversionService中有非常多的Converter,不同类型的转换和格式化用他自己的Converter。
自定义类型转换器的步骤:
1.实现Converter接口,写一个自定义类型转换器:
public class StringToEmployeeConverter implements Converter<String, Employee> {
@Autowired
DepartmentDao departmentDao;
//empAdmin-admin@qq.com-1-101
public Employee convert(String source) {
System.out.println("页面提交的字符串:"+source);
Employee employee = new Employee();
if(source.contains("-")){
String[] split = source.split("-");
employee.setLastName(split[0]);
employee.setEmail(split[1]);
employee.setGender(Integer.parseInt(split[2]));
employee.setDepartment(departmentDao.getDepartment(Integer.parseInt(split[3])));
}
return employee;
}
}
2.将WebDataBinder中的ConversionService设置成我们这个加了自定义类型转换器的ConversionService。
<!--
自定义的ConversionService中含有Converter
-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<!--converters转换器添加我们自定义的类型转换器-->
<property name="converters">
<set>
<bean class="com.hh.component.StringToEmployeeConverter"/>
</set>
</property>
</bean>
3.告诉SpringMvc使用我们的ConversionService
<!--
告诉SpringMvc不用默认的ConversionService,用我们自定义的ConversionService
conversion-service="conversionServiceFactoryBean":使用我们自己配合的类型转化组件
-->
<mvc:annotation-driven conversion-service="conversionService"/>