文档章节

Play 1.x框架学习之五:错误信息显示 (error message display In play framework)

奋斗到天明
 奋斗到天明
发布于 2015/08/27 16:22
字数 883
阅读 260
收藏 0
点赞 0
评论 0

错误信息包括两种,一种是异常信息的显示,一种是后台验证信息显示。而且显示又分直接页面跳转的提交,和通过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 messages
validation.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 checked
validation.match=%s格式不正确
validation.min=%s必须大于%d
validation.invalid=%s输入无效
validation.unique=%s已存在
serverError=服务器异常,请联系管理员

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

Application error
<h1>Oops, an error occured</h1>
This exception has been logged with id <strong>${msg}</strong>.

显示结果: QQ截图20140527152317 然后是后台的验证信息与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)
@Before
public 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 /}
<script type="text/javascript">
    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));
            }
        }
    }
</script>
<body>
<div style="padding-left:20px;padding-top: 20px;">
    <form action="/user" method="post" id="myform"><div>
        <label>用户名:</label><input type="text" id="code" name="user.code"/></div><span></span><br/>
        <div><label>昵称:</label><input type="text" id="name" name="user.name"/></div><span></span><br/>
        <div><label>密码:</label><input type="password" id="pwdid" name="user.pwd"/></div><span></span><br/>
        <div><label>邮箱:</label><input type="text" id="email" name="user.email"/></div><span></span><br />
        <div><label>性别:</label><label><input type="radio" name="user.sex" value="1"checked="checked">男</label>
        <label><input type="radio" name="user.sex" value="0">女</label></div><span></span>
        <input type="button" value="submit" onclick="submitform()">
    </form>
</div>
</body>

测试结果: QQ截图20140527161943

© 著作权归作者所有

共有 人打赏支持
奋斗到天明
粉丝 18
博文 112
码字总数 82707
作品 0
昌平
程序员
英文对照 介绍Play Framework 框架 验证

使用Play验证HTTP数据 h1. Validating HTTP data with Play 验证确保数据有确定的值,或者符合某种特殊的需求,你可以在模型被保存进数据库之前使用验证去核实你的模型,或者直接在HTTP参数中...

lyuehh ⋅ 2010/07/31 ⋅ 1

Play Framework 2.0 介绍

Play Framework 刚刚发布了 2.0 正式版,来看看 Play Framework 2.0 的新特性介绍吧。 原生支持 Java 和 Scala Play Framework 1.x 完全是采用 Java 编写的,可通过插件来支持 Scala,而 2....

红薯 ⋅ 2012/03/14 ⋅ 20

Play!框架文档翻译:验证码(Captcha)

Because anyone can post a comment to our blog engine, we should protect it a little to avoid automated spam. A simple way to protect a form from this is to add a captcha image. ......

红薯 ⋅ 2010/07/13 ⋅ 0

Play 1.x 学习资料汇总

1.Play!Framework学习笔记:初识Play(http://blog.csdn.net/w302974215/article/details/46926007) 2.Play Framework入门引导(http://somefuture.iteye.com/blog/1985667) 3.Play框架1.2.7版......

IT追寻者 ⋅ 2016/07/22 ⋅ 0

中英文对照 介绍Play Framework 框架 概述(Overview)

Play框架概述 h1. Play framework overview Play框架是臃肿的企业级Java之外的另一个选择,它关注的是开发的效率和提供REST式的架构风格, Play是“敏捷软件开发”的绝佳伴侣。 The Play fra...

lyuehh ⋅ 2010/07/11 ⋅ 4

Intellij Idea 配置 Play 1.x Framework 开发环境 (configuration Play 1 x Framework development environmen...

虽然在公司使用的是Eclipse,但是我还是很中意俊俏的Intellij Idea(当然还有风骚的Sublime Text),Play 是一个类ROR的框架(Play 1.x 是比较正统的Java框架,Play 2.x混入Scala血统,个人不...

刀狂剑痴 ⋅ 2015/08/27 ⋅ 0

play框架之环境搭建

项目主页: http://www.playframework.org/ 项目简介: Play!是一个full-stack(全栈的)Java Web应用框架,包括一个简单的无状态MVC模型,具有Hibernate的对象持续,一个基于Groovy的模板引...

jeffsui ⋅ 2012/03/07 ⋅ 2

关于Play(Play 2.0 介绍)

Play 2.0 介绍 2007开始,我们一直致力于让Java开发web应用更容易。Play始于一个内部项目Zenexity,它深刻影响了我们开发web项目的方式:关注开发者生产力,遵循web架构的特点,并打破常规,...

大东哥 ⋅ 2012/03/19 ⋅ 0

分享一个用Scala Play + Slick 开始写的一个学习的开源web app

好, 最近在學Play,用Play在這些天寫了一個初始的app,用的是Play! framework 2.x + Play slick 1.x,前端用的是,原始的bootstrap。已经开源,https://github.com/hellomaya/scala-connec...

自由之信 ⋅ 2016/01/24 ⋅ 2

开源中国7-2期推荐 Java Web应用框架Play!

Play!是一个full-stack(全栈的)Java Web应用框架,包括一个简单的无状态MVC模型,具有Hibernate的对象持续,一个基于Groovy的模板引擎,以及建立一个现代Web应用所需 的所有东西。 Play!...

老枪 ⋅ 2010/07/12 ⋅ 2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

那些证书相关的玩意儿(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等)

之前没接触过证书加密的话,对证书相关的这些概念真是感觉挺棘手的,因为一下子来了一大堆新名词,看起来像是另一个领域的东西,而不是我们所熟悉的编程领域的那些东西,起码我个人感觉如此,且很长...

颖辉小居 ⋅ 16分钟前 ⋅ 0

利用有限制通配符提升API灵活性(28)

1、参数化类型是不可变的 List<String> 不是List<Object>的子类,但是二者是有联系的 利用有限制的通配符类型处理类似情况 List<? extends Object>(生产者) Collection<? super E>(消费者......

职业搬砖20年 ⋅ 23分钟前 ⋅ 0

ssm框架 +bootstrap分页

这里有两种方式 方式一:自己写分页 方式二:使用插件PageHelper 1.自己写分页 1.1 效果 1.2 实现过程 1.2.1 创建分页公共类 //---------------------------1.属性-------------------------...

Lucky_Me ⋅ 30分钟前 ⋅ 0

Istio

helm template install/kubernetes/helm/istio --name istio --namespace istio-system > $HOME/istio.yaml after $ kubectl create namespace istio-system$ kubectl create -f $HOME/ist......

openthings ⋅ 30分钟前 ⋅ 0

内核线程、轻量级进程、用户线程

线程与进程概念 在现代操作系统中,进程支持多线程。 进程是资源管理的最小单元; 线程是程序执行的最小单元。 即线程作为调度和分配的基本单位,进程作为资源分配的基本单位 一个进程的组成...

117 ⋅ 35分钟前 ⋅ 0

elasticsearch2.4.6升级为elasticsearch-5.5.0的经历

将elasticsearch-5.5.0 中的配置 path.data 指向原来的数据路径 即 path.data: /usr/local/src/elasticsearch-2.4.6/data 注意: elasticsearch-5.5.0 需要将jdk版本升级到1.8...

晨猫 ⋅ 36分钟前 ⋅ 1

lvm讲解 磁盘故障小案例

1

oschina130111 ⋅ 40分钟前 ⋅ 0

那些提升开发人员工作效率的在线工具

本文转载自公众号 Hollis 作为一个Java开发人员,经常要和各种各样的工具打交道,除了我们常用的IDE工具以外,其实还有很多工具是我们在日常开发及学习过程中要经常使用到的。 Hollis偏爱使用...

时刻在奔跑 ⋅ 52分钟前 ⋅ 0

restful风格 实现DELETE PUT请求 的web.xml的配置

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframe......

泉天下 ⋅ 57分钟前 ⋅ 0

Shell数组

Shell数组 Shell在编程方面比Windows批处理强大很多,无论是在循环、运算。 bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数...

蜗牛奔跑 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部