給WebWork2.2增加JavaScript客戶端校驗(二)
(接上文)
注:以下代碼大部分來自WebWork 2.1.6對應的文件,非作者自己撰寫.加入的代碼需要import一些類,請自己導入.
修改UIBean.java
1.在evaluateParams方法中的最后一行代碼,
evaluateExtraParams();
之前增加如下代碼
//by scud start if (canJSValidator() && ( form != null) ) { if ((validate != null) && validate.booleanValue() && (form.getActionClass() != null) && (form.getActionName() != null) && name != null) { //by scud end |
2.增加一些方法,可以放在UIBean的最后
//by scud start if (propertyName != null) { for (Iterator iterator = validators.iterator(); iterator.hasNext();) { if (!(validator instanceof ScriptValidationAware)) { ValidatorContext validatorContext = new DelegatingValidatorContext(fieldClass); if (validator instanceof FieldValidator) { // JavaScriptVisitorFieldValidators must validate model, not action if (visitorValidator.getFieldName().equals("model") && ModelDriven.class.isAssignableFrom(fieldClass)) { if (idx != -1) { visit = baseName.equals(visitorValidator.getFieldName()); if (visit) { if (realFieldClass == null) { if (realFieldClass != null) { /** |
修改Form.java
1.增加一些字段
//by scud start Class actionClass; String actionName; List fieldParameters; List fieldValidators; //by scud end |
2.添加代碼 在方法 evaluateExtraParams() 中
addParameter("namespace", namespace);
之前:
//by scud start try { actionClass = ObjectFactory.getObjectFactory().getClassInstance(actionConfig.getClassName()); } catch (ClassNotFoundException e) { // this is ok } actionName = action; //by scud end |
3.在方法 evaluateExtraParams() 的最后增加:
//by scud start if(canJSValidator()) { if (fieldValidators != null) { StringBuffer js = new StringBuffer(); // loop backwards so that the first elements are validated first for (int i = 0; i < fieldValidators.size(); i++) { ScriptValidationAware sva = (ScriptValidationAware) fieldValidators.get(i); Map params = (Map) fieldParameters.get(i); js.append(sva.validationScript(params)); js.append('\n'); } addParameter("javascriptValidation", js.toString()); } else { addParameter("javascriptValidation", "http:// cannot find any applicable validators"); } } //by scud end |
4.增加一些方法
//by scud start public String getActionName() { fieldValidators.add(sva); |
注意:在原有的Form.java里有一個小小的bug,參考 http://forums.opensymphony.com/thread.jspa?threadID=7390&tstart=0 ,在后續版本中應該會被修復.
相關代碼如下:
// if the id isn't specified, use the action name if (id == null) { id = action; //增加了這行 addParameter("id", action); } |
![]() |
除經特別注明外,本文章版權歸JScud Develop團隊或其作者所有. 署名,非商業用途,保持一致. scud(飛云小俠) JScud Develop |
posted on 2005-10-03 14:37 Scud(飛云小俠) 閱讀(1167) 評論(0) 編輯 收藏 所屬分類: WEB