昨天在開(kāi)發(fā)中遇到了驗證的問(wèn)題,結果證明,基于異步的服務(wù)器端驗證是最節省力氣并且效果好的。由于2.1.7的xmlhttp驗證基本不可用,2.2太丑陋,因此我決定用buffalo實(shí)現驗證。思考結果是……發(fā)現事情是出奇的簡(jiǎn)單,實(shí)現起來(lái)美觀(guān)又優(yōu)雅。
1 構造一個(gè)ValidationService(POJO), 包含一個(gè)validate方法:
List validate(String namespace, String action, Map pamameters)
這個(gè)方法實(shí)現很簡(jiǎn)單,只需要根據namespace和action, 構造一個(gè)ActionProxy,
將parameters放到ActionContext中,執行Action.execute,
然后判斷這個(gè)Action是否為ValidateAware, 如果是,那么調用驗證方法,將getFieldErrors中的錯誤按照name -
value的方式作為返回值返回即可。
2 將這個(gè)service放到buffalo-service.properties, 或者用Spring集成。這方面不贅述。
3 客戶(hù)端:
var buffalo = new Buffalo("/appRoot/BUFFALO");var currentForm = null;function validate(theForm) {currentForm = theForm;//組裝form內的信息,代碼略buffalo.remoteCall("validateService.validate",[form.namespace, form.action, parameters],callback);return false;}function callback(reply) {var result = reply.getResult();if (result.length >0) {//有錯誤的處理……} else {// 無(wú)錯誤就提交currentForm.submit();}}4 webwork中,對form.vm稍微進(jìn)行修改,加上onsubmit=return validate(this) 即可
完畢。
聯(lián)系客服