DWZ 自定义异常及后台校验

1.form表单提交弹出自定义异常

  示例: 

<form   id="pagerForm"   method="post" action="后台访问地址"   class="pageForm required-validate"
  onsubmit="return validateCallback(this,dialogAjaxDonereload)"></form>

项目中默认使用:validateCallback 当前ajax提交在 dwz.ajax.js中,部分源码:

var _submitFn = function(){
        $.ajax({
            type: form.method || ‘POST‘,
            url:$form.attr("action"),
            data:$form.serializeArray(),
            dataType:"json",
            cache: false,
            success: callback || DWZ.ajaxDone,
            error: DWZ.ajaxError
        });
    };

DWZ.ajaxError 会返回服务器异常信息在dwz.core.js 其中源码如下:

ajaxError:function(xhr, ajaxOptions, thrownError){
        if (alertMsg) {
            alertMsg.error("<div>Http status: " + xhr.status + " " + xhr.statusText + "</div>"
                + "<div>ajaxOptions: "+ajaxOptions + "</div>"
                + "<div>thrownError: "+thrownError + "</div>"
                + "<div>"+xhr.responseText+"</div>");
        } else {
            alert("Http status2: " + xhr.status + " " + xhr.statusText + "\najaxOptions: " + ajaxOptions + "\nthrownError:"+thrownError + "\n" 

+xhr.responseText);
        }
    }

在上面源码下新增一个DWZ出现error的信息,抛出自定义异常的时候只返回异常文本信息:

ajaxErrorMsg:function(xhr, ajaxOptions, thrownError){
        if (alertMsg) {
            alertMsg.info("<div>"+xhr.responseText+"</div>");
        } else {
            alert("Http status2: " + xhr.status + " " + xhr.statusText + "\najaxOptions: " + ajaxOptions + "\nthrownError:"+thrownError + "\n" 

+xhr.responseText);
        }
    }

在dwz.ajax.js中复制一份validateCallback 的源码 修改方法名validateCallbackMsg,修改error的调用 使用刚刚新增的ajaxErrorMsg:

var _submitFn = function(){
        $.ajax({
            type: form.method || ‘POST‘,
            url:$form.attr("action"),
            data:$form.serializeArray(),
            dataType:"json",
            cache: true,
            success: callback || DWZ.ajaxDone,
            error: DWZ.ajaxErrorMsg
        });
    };

使用时直接使用validateCallbackMsg

2.A 连接抛出自定义异常

示例:

<a id="id" class="edit" href="后台地址"  target="ajaxTodo">下发通知</a>

提交后会通过target中的ajaxTodo方法进行提交:ajaxTodo 是dwz.ajax.js中,新增ajaxTodoMsg:

function ajaxTodo(url, callback){
    console.info(11111111111111111112);
    var $callback = callback || navTabAjaxDone;
    if (! $.isFunction($callback)) $callback = eval(‘(‘ + callback + ‘)‘);
    $.ajax({
        type:‘POST‘,
        url:url.split(‘?‘)[0],
        data:url.split(‘?‘)[1],
        dataType:"json",
        cache: false,
        success: $callback,
        error: DWZ.ajaxError
    });
}

function ajaxTodoMsg(url, callback){
    var $callback = callback || navTabAjaxDone;
    if (! $.isFunction($callback)) $callback = eval(‘(‘ + callback + ‘)‘);
    $.ajax({
        type:‘POST‘,
        url:url.split(‘?‘)[0],
        data:url.split(‘?‘)[1],
        dataType:"json",
        cache: false,
        success: $callback,
        error: DWZ.ajaxErrorMsg
    });
}

  jquery扩展,在$.fn.extend中,修改后的如下:

$.fn.extend({
    ajaxTodo:function(){
        return this.each(function(){
            var $this = $(this);
            $this.click(function(event){
                var url = unescape($this.attr("href")).replaceTmById($(event.target).parents(".unitBox:first"));
                DWZ.debug(url);
                if (!url.isFinishedTm()) {
                    alertMsg.error($this.attr("warn") || DWZ.msg("alertSelectMsg"));
                    return false;
                }
                var title = $this.attr("title");
                if (title) {
                    alertMsg.confirm(title, {
                        okCall: function(){
                            ajaxTodo(url, $this.attr("callback"));
                        }
                    });
                } else {
                    ajaxTodo(url, $this.attr("callback"));
                }
                event.preventDefault();
            });
        });
    },ajaxTodoMsg:function(){
        return this.each(function(){
            var $this = $(this);
            $this.click(function(event){
                var url = unescape($this.attr("href")).replaceTmById($(event.target).parents(".unitBox:first"));
                DWZ.debug(url);
                if (!url.isFinishedTm()) {
                    alertMsg.error($this.attr("warn") || DWZ.msg("alertSelectMsg"));
                    return false;
                }
                var title = $this.attr("title");
                if (title) {
                    alertMsg.confirm(title, {
                        okCall: function(){
                            ajaxTodoMsg(url, $this.attr("callback"));
                        }
                    });
                } else {
                    ajaxTodoMsg(url, $this.attr("callback"));
                }
                event.preventDefault();
            });
        });
    }
});

上面源码 新增了一个ajaxTodoMsg 其中的ajaxTodoMsg调用在dwz.ui.js
if ($.fn.ajaxTodo) $("a[target=ajaxTodo]", $p).ajaxTodo();
if ($.fn.ajaxTodoMsg) $("a[target=ajaxTodoMsg]", $p).ajaxTodoMsg();

3 需要a连接提交方法前后台先验证如下修改:

//dialogs 其他a链接[target=dialog] target属性值不同的一样用此方法修改

$("a[target=dialog]", $p).each(function(){
        $(this).click(function(event){
            var $this = $(this);
            //打开前的数据校验。 使用Validation属性 Validation=“A()”
             var _callback = $this.attr("Validation");
                if (_callback != undefined && !$.isFunction(_callback)) {
                    _callback = eval("("+_callback+")" );
                    if (!_callback) return false;
                }

        ....................省略.........................

使用方法 在A连接上增加:Validation=“A()”
A()为js方法,JS中异步访问后台校验方法,返回 Boolean
JS中的Ajax后台校验对返回的false进行验证提示,相对比自定义异常麻烦。

原文地址:https://www.cnblogs.com/smokerBig/p/12350080.html

时间: 2024-07-29 09:59:30

DWZ 自定义异常及后台校验的相关文章

登录(ajax提交数据和后台校验)

1.前台ajax数据提交 <form id="login_form" action="" method="POST">    <div class="login_frame" style="position:relative";>        <div class="login_gl" style="margin-top:35px;"&

第5章—构建Spring Web应用程序—关于spring中的validate注解后台校验的解析

关于spring中的validate注解后台校验的解析 在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节.比如参数不能为null,email那么必须符合email的格式,如果手动进行if判断或者写正则表达式判断无意开发效率太慢,在时间.成本.质量的博弈中必然会落后.所以把校验层抽象出来是必然的结果,下面说下几种解决方案. 1.简单的校验Demo 依赖: <dependency> <groupId>javax.validation</groupId> <

springMVC(八)——数据校验(后台校验 hibernate validate).

数据校验(后台校验 hibernate validate) 1.首先要导入jar包 2.在相应的实体类中加入注解 package com.zhiyou100.zjc.bean; import javax.validation.constraints.Pattern; import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.NotEmpty; public class

SpringMVC 数据校验。(后台校验 hibernate validate).

1. 数据校验.(后台校验 hibernate validate). 引入jar包. 在相应的实体类中加入注解. 1 package com.zhiyou100.wc.bean; 2 3 import javax.validation.constraints.Pattern; 4 5 import org.hibernate.validator.constraints.Length; 6 import org.hibernate.validator.constraints.NotEmpty; 7

SpringMVC-------3.文件上传,拦截器和数据校验(后台校验)

1.文件上传 1.1导入jar包 1.2设置表单提交属性 文件上传只允许表单为post提交,并且编码类型为multipart/form-data 1.3在springmvc中配置文件上传解析器. 其中的id名不能更改,否则报错 设置最大上传大小maxUploadSize 1.4 在控制层处理代码 @RequestMapping("upload") public String upload(MultipartFile myfile,HttpServletRequest request)

在JSP中动态生成随机验证码,登录时后台校验验证码,以及如何避免同一个验证码被重复提交爆破密码

只需几步就可以生成动态随机的验证码,最终效果如下图: 一 前台显示页面login.jsp 其中验证码显示的是一张图片,链接指向的是生成验证码的servlet,同时点击图片后触发changeImg()这个js函数,使其动态生成一个新的验证码,这个函数中的参数t=Math.random()并不会参与验证码的生成,它的作用仅仅只是表示每次提交的并不是同一个请求,需要单独处理,完整的login.jsp代码如下: <%@ page language="java" contentType=&

简单的通用后台校验代码

萌生写这个代码的原因,是在使用struts2的验证框架时,总觉的有些不太灵活.当一个action中有多个表单需要处理的时候,struts处理起来就稍微麻烦一点,当校验失败时都会return "input"字符串.但我不同表单单校验失败后一般都希望返回不同的result,渲染不同的视图.另外如果我的校验是异步发起的,而我想要的结果是json的时候,也比较麻烦.虽然这些问题可以通过修改result type类型和在result中使用ognl表达式来做到,但绕来绕去实在太过麻烦.而若不适用这

浅谈.net的后台校验

1.场景描述 在开发中,前端的相关模型校验往往不能满足当前开发的需求,也就是并不是十分的安全.于是,很多情况下需要后端进行模型的校验.在.net mvc中,有很多校验的方式(比如:值(1)可以使用内置的标签的校验模式,.net中内置诸如Require/Range/Phone等校验标签,只需在相应的模型字段上打上对应的标签,在相应的Action内使用ModelState.IsVaild便可以进行校验:(2)使用FluentValidation插件(具体的使用查一下文档即可,也比较简单)).本文先抛

关于在DWZ使用ssh后台查询的几种方式

1.查询所有记录,并以列表形式查询 DaoImpl 1 public PageBean queryByPage(String hql, List<Object> listobj, int pageSize, int page) { 2 try { 3 SQLQuery query = this.getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(hql); 4 final int offse