博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Play 1.x框架学习之五:错误信息显示 (error message display In play framework)
阅读量:6939 次
发布时间:2019-06-27

本文共 4616 字,大约阅读时间需要 15 分钟。

  hot3.png

错误信息包括两种,一种是异常信息的显示,一种是后台验证信息显示。而且显示又分直接页面跳转的提交,和通过Ajax的提交。 先看,异常信息与直接页面跳转的例子。在例子中,运用play框架的catch注解标签统一处理: 自定义异常类 app.models.MyException:

package models;public class MyException extends Exception{    public MyException(Exception e) {        super(e);    }	    public MyException(String msg){        super(msg);    }	    public MyException(String msg, Exception e) {        super(msg,e);    }}

控制器父类 app.controllers.Application.java中的拦截方法,这里处理了html请求与ajax请求

@Catch(MyException.class)public static void ExceptionCatcher(MyException e){    String accept= request.headers.get("accept").toString();    String s[]=accept.split(",");    String msg = e.getMessage();    if (s[0].equalsIgnoreCase("[text/html")){        render("errors/550.html",msg);    }    else if (s[0].equalsIgnoreCase("[application/json")){        Validation.clear();   //有了异常只显示异常信息,清空之前的validation数据        Validation.addError("ServerError" ,msg);        Response.current().status = 550;        renderText(JSONUtil.parseObject(Validation.errors()));    }    else{         render("errors/550.html",msg);    }		}

制造一个简单的异常 app.controllers.CalcAction.java:

package controllers;import models.MyException;public class CalcAction extends Application{    public static void zero() throws MyException{        try{            int ka = 2/0;			        }catch(Exception e){            throw new MyException(e);        }    }}

routes中路由节点

GET    /zero                CalcAction.zero

错误信息的i18n对应文档,conf/messages

# Validation messagesvalidation.required=%s不能为空validation.minSize=%s长度必须大于%d位validation.maxSize=%s长度不能超过%d位validation.range=%s必须在 %d和 %d之间validation.equals=%s必须一致validation.email=电子邮箱(Email)格式不正确validation.phone=手机号格式不正确validation.isTrue=%s must be checkedvalidation.match=%s格式不正确validation.min=%s必须大于%dvalidation.invalid=%s输入无效validation.unique=%s已存在serverError=服务器异常,请联系管理员

错误显示页面 views/errors/550.html

Application error

Oops, an error occured

This exception has been logged with id ${msg}.

显示结果: 然后是后台的验证信息与ajax方式提交的显示,这种情况在数据校验的时候常用。统一校验已经在系列前文中提到,这里就直接上代码了,重在显示验证错误信息的显示。 使用的models,其中包含了验证字段,app.models.User.java:

package models;import java.util.Date;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.Table;import play.data.validation.Email;import play.data.validation.MinSize;import play.data.validation.Required;import play.db.jpa.GenericModel;@Entity@Table(name="user")public class User extends GenericModel {    @Id    public long id;    @Required    public String code;    @MinSize(value = 4)    public String name;    public String pwd;    public int sex;    @Email    public String email;    public String regip;    public Date regtime;}

控制器父类 app.controllers.Application.java中的拦截方法

@Catch(MyException.class)@Beforepublic static void validationIntercept() {   if(validation.hasErrors()){        response.status = 550;        renderText(JSONUtil.parseObject(validation.errors()));    }}

routes路由

POST    /user        UserAction.save

添加用户的界面veiw/Application/reg.html,这里为了方便,将html与javascript代码写在一起了。通过引入#{i18n /}可以直接调用i18n函数,进行国际化。

#{extends 'main.html' /}#{set title:'Home' /}#{i18n /}
    var submitform = function(){    $.ajax({        url: "/user",        type: "POST",        dataType: "json",        data: $("#myform").serialize(),        success: function(data){            window.location.href="/user/"+data;         },        error: function(XMLHttpRequest, textStatus, errorThrown){            if (XMLHttpRequest.status == 550) {                var exp = JSON.parse(XMLHttpRequest.responseText);                showMsg(exp);            }       }    });    }     var showMsg = function(exp,obj){        for(var i=exp.length-1;i>=0;i--){            var object=$('#myform input[name="'+exp[i].key+'"]');            if(exp[i].key!="ServerError"){                object.parent().next().css('color','red');                var error=object.prev().html();                object.parent().next().html(i18n(exp[i].message,error,exp[i].variables[0],exp[i].variables[1]));                if(i==0){                    object.focus();                }            }else{                showMsg(i18n(exp[i].message, exp[i].key));            }        }    }
    
        
        
        
        
        
        
        
    

测试结果: QQ截图20140527161943

转载于:https://my.oschina.net/markho/blog/498133

你可能感兴趣的文章
bzoj 2732 [HNOI2012]射箭 半平面交(刘汝佳版不超时) + 整型二分处理
查看>>
servlet之@PostConstruct,@PreDestroy
查看>>
POJ-1925 Spiderman 动态规划
查看>>
winSocket编程(一)WSAStartup
查看>>
grid的简单使用
查看>>
第一天作业
查看>>
MySQL常见面试题
查看>>
简易涂鸦板
查看>>
jquerymobile总结
查看>>
Linux常用命令
查看>>
跟一个久未见面的同学聊天
查看>>
华为自带浏览器兼容性总结其一
查看>>
Linux下的gcc,cc,g++,CC的区别
查看>>
Realm Objective-C 数据库操作
查看>>
asp.net 检测是否是有效连接地址
查看>>
html清屏 meta http-equiv="refresh" content="3">
查看>>
Java
查看>>
hdu 2161(Primes)
查看>>
js 进阶 10 js选择器大全
查看>>
前端可编辑表格插件有哪些
查看>>