浏览 1304 次
|
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-04-15
折腾了几天struts2框架,发现其对校验的支持不是很好,主要体现在如下几点
1.灵活性差 只有theme为xhtml和css_xhtml的时才能够启用纯客户端的js验证. 一般用户对页面UI表示都有一定的要求,当theme为xhtml或css_xhtml的时候会导致页面的排版和用户的UI要求不一致,而且几乎无法解决该问题.并且struts2纯js客户端的错误信息是利用动态添加一个tr来显示的.这就导致如果我想把错误和表单显示在同一行,利用struts2的客户端验证就很难做到. 2.默认支持的校验类型比较少. struts2默认只支持比较少的几种验证类型例如 * required validator * requiredstring validator * stringlength validator * regex validator * email validator * url validator * int validator * double validator date和表达式验证都不支持.这给使用造成了一定的麻烦. 3.不支持客户端定制的js验证. 针对如上几点郁闷的地方,我在网上寻找了很久终于发现了一个比较好js客户端验证的框架 jquery-validate 该验证框架基于jquery这个js框架,利用jquery特性实现客户端的js校验,主要特点如下 1.支持基于表单类似声明式的js验证详细例子如下 $("#signupForm").validate({
rules: {
firstname: "required",
lastname: "required",
username: {
required: true,
minlength: 2
},
password: {
required: true,
minLength: 5
},
confirm_password: {
required: true,
minlength: 5,
equalTo: "#password"
},
email: {
required: true,
email: true
},
topic: {
required: "#newsletter:checked",
minLength: 2
},
agree: "required"
},
messages: {
firstname: "Please enter your firstname",
lastname: "Please enter your lastname",
username: {
required: "Please enter a username",
minLength: "Your username must consist of at least 2 characters"
},
password: {
required: "Please provide a password",
minLength: "Your password must be at least 5 characters long"
},
confirm_password: {
required: "Please provide a password",
minLength: "Your password must be at least 5 characters long",
equalTo: "Please enter the same password as above"
},
email: "Please enter a valid email address",
agree: "Please accept our policy"
}
});
2.内置多种基本校验的类型(包括与ajax结合的服务器断校验) required,remote(ajax服务器端校验器),minlength,maxlength,rangelength,min, max,range,email,url,date,,dateISO,dateDE,number,numberDE,digits,creditcard ,accept,equalTo 3.支持自定义校验类型. 可以通过 $.validator.addMethod("phone", function(value) { return validatePhone(value); }, 'Please enter correct format for referee phone!'); 添加自己的校验器 4.支持多种校验器的声明方式. 1).利用函数声明 请参考1点 2).结合控件属性声明 <input type="radio" id="gender_male" value="m" name="gender" validate="required:true" /> 3).结合控件的class属性声明 <textarea id="ccomment" name="comment" class="required"> 这几种声明方式可以按照实际需要结合使用大大提高了灵活性. 附件是我利用struts2框架自己的form标签扩展的一个form标记的ftl模板,主要用于生成基于jquery的客户端校验标记,做的比较粗糙,重在抛砖引玉. 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2008-05-24
支持你的观点,感觉还是jquery表现力好点
|
|
| 返回顶楼 | |
|
时间:2008-05-24
是啊,现实开发中,总是很难直接套用strut2自带的那几个模板来实现验证,而且不可以插入自定义脚本。为此我在开发过程中也自定义了一套模板。 public synchronized List<Validator> getValidators(Class clazz, String context, String method) {
final String validatorKey = buildValidatorKey(clazz, context);
if (validatorCache.containsKey(validatorKey)) {
if (FileManager.isReloadingConfigs()) {
validatorCache.put(validatorKey, buildValidatorConfigs(clazz, context, true, null));
}
} else {
validatorCache.put(validatorKey, buildValidatorConfigs(clazz, context, false, null));
}
// get the set of validator configs
List<ValidatorConfig> cfgs = validatorCache.get(validatorKey);
// create clean instances of the validators for the caller's use
ArrayList<Validator> validators = new ArrayList<Validator>(cfgs.size());
for (ValidatorConfig cfg : cfgs) {
if (method == null || method.equals(cfg.getParams().get("methodName"))) {
// Remove methodName temporary
Object methodName = cfg.getParams().remove("methodName");
Validator validator = ValidatorFactory.getValidator(cfg, ObjectFactory.getObjectFactory());
// Readd methodName temporary
cfg.getParams().put("methodName", methodName);
validator.setValidatorType(cfg.getType());
validators.add(validator);
}
}
return validators;
}
在整个方法上加锁,多线程并发下,有影响。 |
|
| 返回顶楼 | |
|
时间:2008-06-10
看着不错, 本来就很烦struts的validator
|
|
| 返回顶楼 | |
|
时间:2008-06-10
jquery-validate的rules和messages分开写,如能合在一起写又将如何?
|
|
| 返回顶楼 | |
|
时间:2008-07-02
不晓得有没有完整的代码,我现在弄的一头雾水的,不知道jquery的验证能不能与struts2标签结合。
|
|
| 返回顶楼 | |
|
时间:2008-07-20
可以客户端和服务器同时校验么?
|
|
| 返回顶楼 | |
|
时间:2008-07-21
struts1和struts2的验证框架都没有用过,一直都是写js验证,呵呵
看来有必要了解一下jquery…… |
|
| 返回顶楼 | |
|
时间:2008-07-22
long_jianxiu 写道 不晓得有没有完整的代码,我现在弄的一头雾水的,不知道jquery的验证能不能与struts2标签结合。
跟标签有什么关系,标签在客户端生成的还不是HTMl! |
|
| 返回顶楼 | |






