程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> WebWork2源碼分析續三

WebWork2源碼分析續三

編輯:關於JAVA

最後我打算分析一下WebWork2.x中的輸入校檢部分,校檢數據通常包括客戶端檢查和服務端檢查兩種,在WebWork2.x中都有很好的支持,首先來分析服務端,服務端的校檢類全部來自於com.opensymphony.xwork.validator包,服務端的所有校檢工作都是通過一個ValidationInterceptor攔截器來進行攔截的,所以說Interceptor在WebWork2.x中的地位就相當於我們心中的“神”,他是用來拯救一切的,有點誇張了,哈哈!

下面請欣賞ValidationInterceptor攔截器的代碼

public class ValidationInterceptor extends AroundInterceptor {

protected void after(ActionInvocation dispatcher, String result) throws Exception {

}

//獲取Action,然後調用ActionValidatorManager來進行檢查工作

protected void before(ActionInvocation invocation) throws Exception {

Action action = invocation.getAction();

String context = invocation.getProxy().getActionName();

ActionValidatorManager.validate(action, context);

}

}

別走開,接著看ActionValidatorManager,由於這個類有點復雜,只做主要的分析,其他則忽略

public class ActionValidatorManager {

protected static final String VALIDATION_CONFIG_SUFFIX = "-validation.XML";

//用於將校檢信息緩存起來

private static final Map validatorCache = Collections.synchronizedMap(new HashMap());

private static final Map validatorFileCache = Collections.synchronizedMap(new HashMap());

private static final Log LOG = LogFactory.getLog(ActionValidatorManager.class);

//建立一個DelegatingValidatorContext,用於獲取設置資源,如:錯誤提示信息等

public static void validate(Object object, String context) throws ValidationException {

ValidatorContext validatorContext = new DelegatingValidatorContext(object);

validate(object, context, validatorContext);

}

//

public static void validate(Object object, String context, ValidatorContext validatorContext) throws ValidationException {

//建立一個校檢列表

List validators = getValidators(object.getClass(), context);

Set shortcircuitedFIElds = null;

//遍歷這個列表

for (Iterator iterator = validators.iterator(); iterator.hasNext();) {

Validator validator = (Validator) iterator.next();

validator.setValidatorContext(validatorContext);

//調用校檢類,注意所有的自定義校檢類必須從validator接口中實現

validator.validate(object);

}

}

至於客戶端校檢,由於操作全部來自於com.opensymphony.webwork.validators包,其他的所有校檢類都從ScriptValidationAware接口下繼承,由於時間的關系我在這裡不做分析了,各位如有興趣,自己去研究吧!

其實WebWork2.x裡面還有很多相關的細節調用,在此我不能一一描述,各位如果有興趣的話,也不妨來看看源碼。

今天就到這裡了啊,至於WebWork2.x的標簽我就不想看了,不知道是什麼原因我就是不太喜歡標簽啊,下個Java Web應用我一定用WebWork2.x來進行開發,這麼好的一個Framework不用太可惜了啊!

Email: [email protected]

[email protected]

Blog: http://blog.csdn.Net/zhuam

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved