validationEngine v2.0进行了重写,变化很大。
首先说一下整个表单验证,使用简单的一行代码就能完成:
$("#form.id").validationEngine('validate');
这是我之前用的验证代码:
var success=true;
$(formid+" :text,"+formid+" select,"+formid+" textarea").each(function(i,input){
if($.validationEngine.loadValidation("#"+$(input).attr('id'))){
success=false;
}
});
是挨个验证的,当然现在也可以挨个验证:
$("#form.id").validationEngine('validateField', "比如一个INPUT的ID");
下面是自己使用AJAX验证的一点经验:
1.和旧版本一样,也是在域的class属性中添加ajax[XXXX],XXXX是自定义的验证规则。
2.规则与旧版本就有区别了:
"ajaxUserCall": {
"url": "ajaxValidateFieldUser",
"extraData": "name=eric",
"extraDataDynamic": ['#user_id', '#user_email'],
"alertText": "* This user is already taken",
"alertTextOk": "All good!",
"alertTextLoad": "* Validating, please wait"
}
- url - 这个都懂
- extraData - 可选的传递参数
- extraDataDynamic - 可选 DOM id's,其value属性会作为参数传递
- alertText - 验证错误提示信息
- alertTextOk - 验证成功提示信息(绿色)
- alertTextLoad - 验证提交过程中的提示信息
3.接下来这部分是我修改的两处validationEngine源代码,因为我认为这部分不适合使用struts2。
if (!options.isError) {
alert(extraDataDynamic);
$.ajax({
type: "GET",
url: rule.url,
cache: false,
dataType: "json",
data: "fieldId=" + field.attr("id") + "&fieldValue=" + field.val() + "&extraData=" + extraData + "&" + extraDataDynamic,
field: field,
rule: rule,
methods: methods,
options: options,
beforeSend: function() {
// build the loading prompt
var loadingText = rule.alertTextLoad;
if (loadingText)
methods._showPrompt(field, loadingText, "load", true, options);
},
error: function(data, transport) {
methods._ajaxError(data, transport);
},
success: function(json) {
// asynchronously called on success, data is the json answer from the server
var errorFieldId = json.validateReturn[0];
var errorField = $($("#" + errorFieldId)[0]);
// make sure we found the element
if (errorField.length == 1) {
var status = json.validateReturn[1];
// read the optional msg from the server
var msg = json.validateReturn[2];
if (!status) {
// Houston we got a problem - display an red prompt
options.ajaxValidCache[errorFieldId] = false;
options.isError = true;
// resolve the msg prompt
if(msg) {
if (options.allrules[msg]) {
var txt = options.allrules[msg].alertText;
if (txt)
msg = txt;
}
}
else
msg = rule.alertText;
methods._showPrompt(errorField, msg, "", true, options);
} else {
if (options.ajaxValidCache[errorFieldId] !== undefined)
options.ajaxValidCache[errorFieldId] = true;
// resolves the msg prompt
if(msg) {
if (options.allrules[msg]) {
var txt = options.allrules[msg].alertTextOk;
if (txt)
msg = txt;
}
}
else
msg = rule.alertTextOk;
// see if we should display a green prompt
if (msg)
methods._showPrompt(errorField, msg, "pass", true, options);
else
methods._closePrompt(errorField);
}
}
}
});
}
注意红字部分,根据文档描述,需要返回的JSON数据应该形如:
Client receives <== ["id1", boolean, errorMsg] Server
- 域的ID
- 验证状态,成功或者失败
- 可选的验证提示信息. 如果不写则使用规则中定义的提示信息
我在struts2中使用的是struts2-json-plugin-2.1.8.jar(struts2代码在后面),返回的属性是Object[] validateReturn, 所以这里接收到的JSON数据应该我改成了json.validateReturn.
if (extraDataDynamic) {
var tmpData = [];
var domIds = String(extraDataDynamic).split(",");
for (var i = 0; i < domIds.length; i++) {
var id = domIds[i];
if ($(id).length) {
var inputValue = field.closest("form").find(id).val();
var keyValue = $(id).attr("name") + '=' + escape(inputValue);
tmpData.push(keyValue);
}
}
此处源代码是在直接使用extraDataDynamic中填写的域把"#"换成"&"就附在URL后面作为参数了,在域中如果和我一样name属性和id属性不一致,则修改此处为红色字体。
4.这部分是action中的代码
private Object[] validateReturn = new Object[3];
private HttpServletRequest request;
@Action(results = {@Result(type="json", params = { "excludeProperties", "inputStream,resultStatus,expertiseVo,expertiseVos"})}, value="validateExpertiseTypeNo")
public String validateExpertiseTypeNo(){
String validateId = request.getParameter("fieldId");// 获取验证的域
String validateValue = request.getParameter("fieldValue"); //获取域的value属性
int valiValue = Integer.parseInt(validateValue);//我使用的int型,在class里还有验证规则 onlyNumber
if(expertiseVo.getExpertiseType() == 0){//我需要在验证规则中添加其他域的值
validateReturn[0] = validateId;//这里是返回的提示信息数组
validateReturn[1] = false;
validateReturn[2] = "未指定类型";
}else if(expertiseVo.getExpertiseType() != 0){
expertiseVo = expertiseService.findExpertiseByNo(expertiseVo.getExpertiseType(), valiValue);
if(expertiseVo.getId() == null){
validateReturn[0] = validateId;
validateReturn[1] = true;
validateReturn[2] = "可以使用";
}else if(expertiseVo.getId().length > 0){
validateReturn[0] = validateId;
validateReturn[1] = false;
validateReturn[2] = "在指定类型已经存在";
}
}
return SUCCESS;
}
以上是我由v2.0替换旧的v1.6在使用ajax验证上的一点心得,因为新版本中ajax规则中多了
extraData - 可选的传递参数
extraDataDynamic - 可选 DOM id's,其value属性会作为参数传递
这两个选项,可以让我提供组合域的验证。比如我在数据库中设置了多列组合的唯一约束。
参考资料:
https://github.com/posabsolute/jQuery-Validation-Engine官方文档
http://www.position-absolute.com/articles/using-form-ajax-validation-with-the-jquery-validation-engine-plugin/插件作者个人站点
分享到:
相关推荐
struts2.0struts2.0struts2.0struts2.0struts2.0struts2.0struts2.0struts2.0struts2.0struts2.0
struts-2.0 jarstruts-2.0 jarstruts-2.0 jarstruts-2.0 jar
struts2.0用户验证struts2.0用户验证struts2.0用户验证struts2.0用户验证struts2.0用户验证struts2.0用户验证struts2.0用户验证struts2.0用户验证struts2.0用户验证struts2.0用户验证struts2.0用户验证
sstruts2.0 struts2.0sstruts2.0 struts2.0sstruts2.0 struts2.0sstruts2.0 struts2.0sstruts2.0 struts2.0sstruts2.0 struts2.0sstruts2.0 struts2.0sstruts2.0 struts2.0sstruts2.0 struts2.0
NULL 博文链接:https://cxyzhangbin.iteye.com/blog/1185185
Struts开发流程? 1、添加Struts支持 2、开发业务逻辑类(模型,Model) 3、开发Action组件(控制组件,Controller) 4、开发JSP页面 5、调试运行
为Struts 2.0做好准备 Struts作为MVC 2的Web框架,自推出以来不断受到开发者的追捧,得到用广泛的应用。作为最成功的Web框架,Struts自然拥有众多的优点: MVC 2模型的使用 功能齐全的标志库(Tag Library) 开放...
本人自己写的struts2结合jquery实现ajax的源码。
struts-2.0 jarstruts-2.0 jarstruts-2.0 jarstruts-2.0 jar
Spring 2.0集成Struts 2.0
Ext2.0+struts2+spring2.5+ibatis2 结合的例子
Spring2.0对Struts2.0的整合,内含一个小示例,带清晰注释
Struts2之ajax初析的并结合jquery一个例子 Web2.0的随波逐流,Ajax那是大放异彩,Struts2框架自己整合了对Ajax的原生支持(struts 2.1.7+,之前的版本可以通过插件实现),框架的整合只是使得JSON的创建变得异常简单...
06 在Struts 2.0中实现表单数据校验(Validation) 07 Struts 2的基石——拦截器(Interceptor) 08 在Struts 2中实现IoC 09 在Struts 2中实现文件上传 10 在Struts 2中实现CRUD 11 Struts 2中的OGNL 12 trus 2的新...
清晰的介绍了Struts 2.0框架的工作流程,Action线程安全,程序入口,配置文件。
SSH框架包,spring2.0+struts2+hibernate3.1,jdbc驱动,java包
struts2.0中struts.xml配置文件详解
struts2.0升级到struts2.1的工具,自动修改配置文件和页面
spring2.0源码 struts1.2源码
Struts2与Ajax 的实现原理,于Servlet+Ajax原理是一致的,都是通过后台的response.getWriter().print("");把数据传输给前台的。 前台Ajax格式如下(需要导入ajax库,比如:jquery-1.11.3.js) 格式: $(function()...