1. 程式人生 > >springmvc屬性編輯器和自定義引數解析器

springmvc屬性編輯器和自定義引數解析器

自定義的引數解析器

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>