`
cargoj
  • 浏览: 59230 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

validationEngine v2.0 结合struts2 ajax验证

阅读更多

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/插件作者个人站点

    1
    5
    分享到:
    评论

    相关推荐

      Inline Form Validation Engine+Struts2的AJAX验证

      本文介绍了如何将Inline Form Validation Engine这个前端验证引擎与Struts2的AJAX验证功能相结合,提升Web应用的用户体验。通过这种方式,可以实现前端的实时验证和后端的异步验证,确保数据的准确性和一致性,同时...

      struts2.0用户验证

      struts2.0用户验证struts2.0用户验证struts2.0用户验证struts2.0用户验证struts2.0用户验证struts2.0用户验证struts2.0用户验证struts2.0用户验证struts2.0用户验证struts2.0用户验证struts2.0用户验证

      struts2ajax项目

      此外,为了更好地展示数据,可能还需要在Struts2中使用Interceptor(拦截器),例如,`params`拦截器用于将请求参数绑定到Action,`validation`拦截器负责验证表单数据,`workflow`拦截器管理Action的生命周期。...

      LG1V2.0-Struts2入门

      5. **拦截器**:Struts2的核心特性之一,允许在Action执行前后插入自定义逻辑,如日志记录、权限验证等。 通过这个简单的“计算器”应用,我们可以全面了解Struts2的开发流程,进一步学习时可以扩展到更复杂的业务...

      struts2的Ajax实现注册验证

      这篇文档“struts与ajax.docx”可能包含了如何将Struts2和Ajax结合使用的详细步骤。通常,这个过程会涉及以下几个关键点: 1. **Struts2配置**:首先,需要在`struts.xml`配置文件中定义一个Action,这个Action将...

      Spring 2.0集成Struts 2.0

      至于数据校验,Struts 2提供了更方便的验证机制,可以在Action类的validate方法中进行,也可以使用 Commons Validator 或自定义验证规则,增强了验证的灵活性和可定制性。 总的来说,Spring 2.0与Struts 2.0的集成...

      Struts 2.0

      解压后,可以参考提供的示例程序进行学习,例如`struts2-blank-2.0.14.war`,将其解压并将`WEB-INF/lib`目录下的jar文件添加到Eclipse或其他IDE的新建Web应用程序项目中。 配置Struts 2的关键在于`web.xml`文件。与...

      struts-2.0 jarstruts-2.0 jar1

      struts-2.0 jarstruts-2.0 jarstruts-2.0 jarstruts-2.0 jar

      Ext2.0+struts2+spring2.5+ibatis2

      在IT领域,构建高效、可扩展的企业级应用是至关重要的,而"Ext2.0+Struts2+Spring2.5+Ibatis2"的组合就是一种常见的技术栈,用于实现这样的目标。这个技术组合提供了从用户界面到数据访问的全方位解决方案。 **Ext...

      Struts2之ajax初析的并结合jquery一个例子

      Struts2之ajax初析的并结合jquery一个例子 Web2.0的随波逐流,Ajax那是大放异彩,Struts2框架自己整合了对Ajax的原生支持(struts 2.1.7+,之前的版本可以通过插件实现),框架的整合只是使得JSON的创建变得异常简单...

      struts2.0中文教程

      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的新...

      Struts2漏洞检查工具2017版

      Struts2框架在其某些版本中,特别是使用了OGNL(Object-Graph Navigation Language)表达式的地方,未对反序列化的数据进行充分的验证和过滤,导致了这些漏洞的出现。 1. **CVE-2017-5638**:这是Struts2最知名的...

      Spring2.0整合Struts2.0

      **Spring与Struts2整合** 的主要目标是将Spring的控制反转(IoC)和事务管理能力与Struts2的用户界面和业务逻辑处理相结合。整合后,Spring负责管理Struts2中的Action对象,以及其他的业务和服务层组件,而Struts2则...

      struts-2.0 jarstruts-2.0 jar

      struts-2.0 jarstruts-2.0 jarstruts-2.0 jarstruts-2.0 jar

      struts2.0整合Struts 1

      2. **Form Bean转换**:将Struts 1的Form Bean转换为Struts 2的Action类,调整数据绑定和验证逻辑。 3. **JSP标签**:Struts 2提供了新的标签库,需要更新JSP页面以使用Struts 2的标签。 4. **Interceptor配置**:...

      ajax+struts2.0+jsp下拉列表级联

      通过研究这些文件,你可以深入理解如何将AJAX、Struts2和JSP结合,实现动态交互的Web应用。 总结来说,"ajax+struts2.0+jsp下拉列表级联"展示了如何利用现代Web技术提升用户体验。AJAX提供了无刷新的交互,Struts2...

      struts2.0升级到struts2.1的工具

      struts2.0升级到struts2.1的工具,自动修改配置文件和页面

      spring2.0源码 struts1.2源码

      Spring 2.0 和 Struts 1.2 是两个经典的Java Web开发框架,它们在21世纪初极大地推动了企业级应用的构建。这两个框架分别代表了不同的设计思想,Spring 强调依赖注入和面向切面编程,而Struts则是MVC(Model-View-...

      Struts2+Jquery+Ajax

      8. 实例演示:使用Struts2+Jquery+Ajax实现动态加载数据或表单验证 "struts2 jar"文件包含了Struts2框架的核心库,可能包括struts2-core、struts2-convention、struts2-json-plugin等依赖,这些是开发Struts2应用必...

    Global site tag (gtag.js) - Google Analytics