本站首页    管理页面    写新日志    退出


«November 2025»
1
2345678
9101112131415
16171819202122
23242526272829
30


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7650638
建立时间:2006年5月29日




[Tapestry]Tapestry数据校验-修改各Validator
软件技术

lhwork 发表于 2006/7/11 17:52:58

1,BaseValidator的修改非常简单,增加了一个submitName属性及其getter和setter。用于保存校验器适用的提交按钮的ID。 // whether skip this validator     public boolean isSkipValid(IFormComponent field) {         IPage page = field.getPage();         return (page instanceof XtradeBasePage && this.getSubmitName() != null && !this                 .getSubmitName()                 .equals(((XtradeBasePage) page).getSubmitName()));     }     // whether form range's validator     public boolean isFormValid() {         return this.getSubmitName() == null;     }     //add validation script     public void addScriptContent(IRequestCycle cycle, IComponent field,             String submitListener) {         TapestryUtils.getPageRenderSupport(cycle, field)                 .addInitializationScript(submitListener);     } 2,MinLength的属性修改:    public void setMinLength(String minLength) {          if (minLength.lastIndexOf("_") == -1) {             _minLength = Integer.parseInt(minLength);         } else {             _minLength = Integer.parseInt(minLength.substring(minLength                     .lastIndexOf("_") + 1));             this.setSubmitName(minLength.substring(0, minLength                     .lastIndexOf("_")));         }     }     public String getMinLength() {         if (this.getSubmitName() == null)             return _minLength + "";         else             return this.getSubmitName() + "_" + _minLength;     } 用于解析提交按钮ID和最小值。格式:SubmitID_MinLength,如:search_5 3,同时,需要修改validate方法,用于服务器端校验: public void validate(IFormComponent field, ValidationMessages messages,             Object object) throws ValidatorException {         String string = (String) object;         if (!this.isSkipValid(field)) {             if (string == null || string.length() < _minLength)                 throw new ValidatorException(buildMessage(messages, field),                         ValidationConstraint.MINIMUM_WIDTH);         }     } 其中绿色部分是为了兼容Tapestry缺省的做法:如果不加提交按钮ID前缀,则对所以提交按钮进行校验。 4,当然了,客户端校验的代码也需要修改: public void renderContribution(IMarkupWriter writer, IRequestCycle cycle,             FormComponentContributorContext context, IFormComponent field) {         context                 .includeClasspathScript("/org/apache/tapestry/form/validator/StringValidator.js");         context                 .includeClasspathScript("/com/fitechlabs/xtrade/web/tapestry/validator/MinLengthValidator.js");         String message = buildMessage(context, field);         if (this.isFormValid()) {             context.addSubmitHandler(Script.getFormMinLengthScript(field,                     _minLength, TapestryUtils.enquote(message)));         } else {             this.addScriptContent(cycle, field, Script                     .getSubmitMinLengthScript(this.getSubmitName(), field,                             _minLength, TapestryUtils.enquote(message)));         }     } 其中绿色部分是原来的默认操作。 5,MinLengthValidator.js代码比较简单 TapestryEx.minLengthValid=function(event,formId,fieldId,minLength,message){          var field = document.getElementById(formId).elements[fieldId];         if (field.value.length < minLength)         event.invalid_field(field, message) } 6,Script.java代码 public static String getFormMinLengthScript(IFormComponent field,             int minLength, String message) {         StringBuffer buffer = new StringBuffer();         buffer                 .append("function(event) { Tapestry.validate_min_length(event, '");         buffer.append(field.getClientId());         buffer.append("', ");         buffer.append(minLength);         buffer.append(", ");         buffer.append(message);         buffer.append("); }");         return buffer.toString();     }     public static String getSubmitMinLengthScript(String submitName,             IFormComponent field, int minLength, String message) {         StringBuffer buffer = new StringBuffer();         buffer.append("TapestryEx.onclick(");         buffer.append("'" + submitName + "',");         buffer.append("function(event){TapestryEx.minLengthValid(event,");         buffer.append("'" + field.getForm().getId() + "',");         buffer.append("'" + field.getClientId() + "',");         buffer.append(minLength + ",");         buffer.append(message + ");});");         return buffer.toString();     } 其它的Validator根据MinLength进行相应的修改即可。


阅读全文(3099) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.688 second(s), page refreshed 144806498 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号