spring mvc 数据绑定流程:
springmvc将servletrequest对象及目标方法的形参实例传给webdatabinderfactory实例,以创建databinder实例对象。databinder调用装配在springmvc上下文中的conversionservice组件进行类型转换和数据格式化工作,将servlet请求信息填充到形参对象中。调用validator主键对已经绑定了请求信息的形参对象精选数据有效性验证,并最终生成数据绑定结果bindingdata对象。springmvc抽取bindingresult中的形参对象和校验错误对象,将他们赋给处理方法的相应参数
我们查看源代码可以看到,通过webdatabinderfactory创建databinder对象
自定义类型转换器
当我们碰到一些特殊场合,有可能需要我们自己定义类型转换器。下麦呢来讲解一个自定义类型转器,将字符串转换成emp对象,当页面无法完成数据绑定或者类型转换时,springmvc会抛出异常,异常信息可以使用bindingresult来进行获取。
spring定义了三种类型的转换器接口,实现任意一个转换器接口都可以作为自定义转换器注册到conversionservicefactorybean中。
convertre<s,t>:将s类型转换为t类型。
converterfactory:将相同系类的多个“同质”converter封装在一起,如果希望一种类型转换成另一种类型以及子类对象(例如string转换成number以number的子类),可以使用该转换器
genericconverter:会根据源类对象以及目标类对象所在的宿主类中的上下文信息精选类型转换。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package com.spring.mvc.controller;
import org.springframework.core.convert.converter.converter;
import org.springframework.stereotype.component;
@component
public class userconverter implements converter<string, user>{
@override
public user convert(string source) {
system.out.println(source);
string users [] = source.split("-");
user user = new user();
user.setuno(integer.valueof(users[0]));
user.setusername(users[1]);
user.setuserpass(users[2]);
return user;
}
}
|
conversionservice时springmvc中类型转换器的核心接口,要添加自定义类型转换器,需要实现该接口/利用
conversionservicefactorybean在spring的ioc容器中第一一个conversionservice,并在bean属性配置对于的类型转换器的实现类,springmvc处理方法的形参绑定时就会自动调用该类型转换器。
|
1
2
3
4
5
6
7
8
9
10
11
12
|
<!--将非mapping配置下的请求交给默认的servlet来处理 -->
<mvc:default-servlet-handler />
<bean id="conversionservice"
class="org.springframework.context.support.conversionservicefactorybean">
<property name="converters">
<set>
<ref bean="userconverter" />
</set>
</property>
</bean>
<!-- 注册类型转换器 -->
<mvc:annotation-driven conversion-service="conversionservice" />
|
在实际的开发同需要配置:<mvc:annotation-driven />标签
数据格式化
对属性的输入/输出格式化,其本质来讲依然属于类型转换的范畴。spring在格式化模块中定义一个实现conversionservice接口的farmattingconversionservice实现类,该实现类扩展了genericconversionservice,因此它既具有类型转换的功能有具有格式化的功能。formattingconversionservice拥有一个formattingconversionservicefactorybean工厂类,后者用于构造前者。我们要注册这个
|
1
|
<mvc:annotation-driven conversion-service="formattingconversionservicefactorybean" />
|
jsr303
jsr303时java为bean数据合法性校验提供的标准框架,它已经包含在javaee6.0中,jsr303通过在bean属性上标注类似@notnull,@max等标准的数据指定验证规则,并通过标注的验证接口对bean进行验证。
|
1
2
3
4
5
6
7
8
9
10
11
12
|
@notempty
@notnull
private string name;
@notnull
@notempty
private string age;
@notnull
@notempty
@email
private string email;
|
我们在前台使用springmvc提供的form标签使用form:errors path 绑定属性即可
|
1
2
3
4
5
6
7
8
|
@requestmapping(value="/student",method=requestmethod.post)
public string add(@valid()student student,bindingresult result){
if (!result.haserrors()) {//判断是否有格式转换错误或者其他校验没通过
userservice.addstudent(student);
return "redirect:list";
}else
return "addpage";
}
|
springmvc提示消息国际化
|
1
2
3
4
|
<!-- 注册国际化信息,必须有id,指定资源文件名称,资源文件在src目录下 -->
<bean id="messagesource" class="org.springframework.context.support.resourcebundlemessagesource">
<property name="basename" value="message"></property>
</bean>
|
相关文章
- ASP.NET本地开发时常见的配置错误及解决方法? 2025-06-10
- ASP.NET自助建站系统的数据库备份与恢复操作指南 2025-06-10
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
- 个人服务器网站搭建:如何选择适合自己的建站程序或框架? 2025-06-10
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
-
2025-05-29 95
-
2025-05-24 96
-
2025-05-25 72
-
2025-05-25 70
-
2025-05-25 63



