springmvc屬性編輯器和自定義引數解析器
阿新 • • 發佈:2019-02-20
自定義的引數解析器
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>