SpringMVC中的拦截器,类型转换国际化验证

本节重点:拦截器(责任链模式)、类型转换、国际化、验证
1、拦截器:实现HandlerInterceptor接口或继承HandlerInterceptorAdapter

<!-- intercepter -->
<mvc:interceptors>
	   <!-- 配置多个形成拦截器链 -->
	   <mvc:interceptor>
		 <!-- /**将拦截所有包括静态资源但不包括jsp,如果jsp包含静态js也会经过拦截器 -->
		 <!-- /*只拦截一级目录下所有Controller,如:/he.action,不拦截二级目录及静态资源 --> 
		 <mvc:mapping path="/**"/>|<mvc:mapping path="/*"/>
		 <!-- 如果拦截了所有,必须设置放过静态资源 -->
		 <mvc:exclude-mapping path="/static/**"/>
		 <bean class="com.cssl.interceptor.MyInterceptor"/>
	   </mvc:interceptor>
	   <mvc:interceptor>
   		  <mvc:mapping path="/**"/>
  		   <ref bean="引用的类名首字母小写"/>
  	 </mvc:interceptor>
</mvc:interceptors>

拦截器参数handler中包含请求类及方法,可以精确控制调用方法权限
handler.toString().indexOf(“方法名”)!=-1

2、类型转换:
a、基本类型的数据类型转换自动完成
日期类型转换(springmvc只提供yyyy/MM/dd这样的格式转换)
b、@InitBinder //注解方式方法名可以任意命名,只能转换一种格式

public void initBind(DataBinder binder){
 	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	 //true表示该日期字段可以为空
 	binder.registerCustomEditor(Date.class, new CustomDateEditor(sdf,false)); 
}

c、直接在vo的属性上(get|set也可以)注解@DateTimeFormat(pattern=“yyyy-MM-dd”)

BindingResult:该类封装转换失败的信息,必须紧跟在command类型参数后面,日期必须是command属性
**result.hasErrors()**判断是否转换出错

3、自定义类型转换:
Spring3引入了一个Converter接口,它支持从一个Object转为另一个Object。除了Converter接口之外,实现 ConverterFactory接口和GenericConverter接口也可以实现我们自己的类型转换逻辑。
A、定义转换类实现Converter<S,T>接口重写convert实现类型转换功能
B、添加注解@Component注册到bean到Spring容器
C、配置

<bean id="conversionService"    class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
 	<property name="converters">
		     <set>
			  <ref bean="dateConverter"/>
		     </set>
	 </property>
</bean>

或者手动注入日期格式类型:

<set>
       <bean class="com.cssl.converter.DateConverter">
		  <constructor-arg type="java.lang.String" value="yyyy-MM-dd"/>
       </bean>
 </set>
D、修改<mvc:annotation-driven conversion-service="conversionService"/> 

4、国际化:IE11设置语言问题(不显示中文可以先删除英文语言选项)

<!-- 资源文件绑定器(使用Spring标签配置) -->
<bean id="messageSource"   class="org.springframework.context.support.ResourceBundleMessageSource">
	 <property name="basename" value="message"/>
	 <property name="useCodeAsDefaultMessage" value="true"/>
</bean>

在JSP文件中使用fmt标记就可以实现浏览器语言国际化
  如:

	 <fmt:setBundle basename="message"/>
    <fmt:message key="info.login.title" />

其中的info.login.title和你的资源文件对应.
另外一种方式是使用spring自带的标签显示国际化信息

如:<spring:message code="main.title" />

注意:使用springmvc标签必须配置监听器,除非是通过控制器访问页面

<listener>
   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener>

属性文件显示中文插件:
Eclipse Marketplace->find properties->选择Properties Editor

5、Spring3开始支持JSR-303验证框架:
验证使用的包hibernate-validator-5.0.1.Final-dist
最少需要4个jar:
hibernate-validator-5.0.1.Final.jar
required:classmate-0.8.0.jar、jboss-logging-3.1.1.GA.jar、validation-api-1.1.0.Final.jar
注解:

1、在vo参数前添加@Validated|@Valid,后面紧跟BindingResult参数不能间隔其他参数
2、在实体类要验证的属性getXxx上添加各种验证注解
	@NotNull(空对象)、 @NotEmpty(字符串)、@NotBlank(去首尾空格)、 @Size(min=4,max=6)、@Email
3、使用<sf:errors path="vo.fieldName"/>显示错误(vo对应实体类首字母小写UsersVo-usersVo)
4、国际化显示可以不写message,有默认出错信息提示,如果想自定义则修改键名(key)为:
Size.usersVo.name ,其含义为(Size代表@Size,usersVo代表vo,name代表fileName)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值