自定义的参数解析器
Springmvc调用action方法过程,通过参数解析器:
Springmvc自带了很多的参数解析器,一般能满足需求。可以自定义参数解析器:
需求:
从session中取当前用户身份信息。
实现:
通过形参定义ActiveUser activeUser,需要由参数解析器来解析这个值,
解析过程:从session取出activeUser给形参赋值。
自定义参数解析器方法:
实现:implements WebArgumentResolver
public class UserArgumentResolver implements WebArgumentResolver {
//methodParameter存储action方法的参数信息
//webRequest是springmvc封装对象,通过此对象获取request和session等域的值
@Override
public Object resolveArgument(MethodParameter methodParameter,
NativeWebRequest webRequest) throws Exception {
//如果参数的类型是activeUser从session中取当前用户信息设置到action方法形参上
if(methodParameter.getParameterType().equals(ActiveUser.class)){
//从session中取当前用户信息
ActiveUser activeUser = (ActiveUser) webRequest.getAttribute(Config.ACTIVEUSER_KEY, WebRequest.SCOPE_SESSION);
return activeUser;//将参数值向action的方法形参赋值
}
return UNRESOLVED;
}
}
配置自定义的参数解析器在springmvc.xml中配置:
<mvc:annotation-driven conversion-service="conversionService">
<mvc:argument-resolvers>
<bean class="base.action.converters.UserArgumentResolver"/>
</mvc:argument-resolvers>
</mvc:annotation-driven>
springmvc属性编辑器
对于日期类型的属性转换通过注入属性编辑器,可以在action类中通过@Binder注解注册属性编辑器。通过自定义属性编辑类方法,定义属性编辑器。
定义方法:
需要实现implements Converter<String, java.util.Date>
String就是原始类型
java.util.Date就是目标类型
目标:
将页面输入的开始采购时间(原始类型),向YycgdCustom类中java.util.Datecjtime_start属性(目标类型)赋值,需要将原始类型字符类型转成日期java.util.Date。
注意:属性编辑器中目标类型和对象中属性类型一致。
接口方法:
public Date convert(String source) {
如果原始类型转换目标类型成功,通过return 向对象的属性赋值。
如果原始类型转换目标类型不成功,通过return 向对象的属性赋值为null.
日期类型转换的属性编辑器:
public class DateConverter implements Converter<String, Date> {
public Date convert(String source) {
if(source != null){//如果从浏览器传入字符串不等于开始转换
source = source.trim();//去除前后空格
if(source.equals("")){
source = null;
}
if(source!=null){//去除空格后不为空则开始转换
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
return simpleDateFormat.parse(source);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
}
return null;
}
}
配置属性编辑器在springmvc.xml中配置:
<!-- 注解驱动 -->
<mvc:annotation-driven conversion-service="conversionService">
</mvc:annotation-driven>
<!-- 自定义注册属性编辑器 -->
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="yycg.base.action.converters.StringTrimConverter" />
<bean class="yycg.base.action.converters.DateConverter" />
<bean class="yycg.base.action.converters.DatetimeConverter" />
</list>
</property>
</bean>