grails中的错误管理
Error management in grails
我对Grails很陌生,在一个应用程序中我需要检查日期。在以前的Java程序中,我使用了两个具有不同细节粒度的javascript函数。两者都接受从1970-01-01到20999-12-31的日期。其中一个要求输入正确的日期和(可选的)时间,并告诉用户他/她输入了错误的条目:
function okdate1(dtstr) {
var ok = true;
// First trim off leading and trailing white space
var trimPattern = /(?:'b(.*)'b)/;
dtstr = (dtstr.match(trimPattern))[1];
// Verify that input is within range and correct
var pat = /^((?:19[7-9][0-9])|(?:20[0-9][0-9]))-((?:(?:0)?[1-9])|(?:1[0-2]))-((?:(?:0)?[1-9])|(?:[1-2][0-9])|(?:3[01]))(?: ((?:(?:0|1)[0-9])|(?:2[0-3])):([0-5][0-9]))?$/;
var dtm = dtstr.match(pat);
if (!dtm) {
ok = false;
} else { // Verify that day in in range for the given month
var days = Array(31,28,31,30,31,30,31,31,30,31,30,31);
// Compensate for leap year
if ((((dtm[1] % 4) === 0) && !((dtm[1] % 100) === 0)) || ((dtm[1] % 400) === 0)) {
days[1] = 29;
}
if (dtm[3] > days[dtm[2] - 1]) ok = false;
}
if (!ok) alert("Enter date and (optionally) time on the form 'yyyy-MM-dd HH:mm'");
return ok;
}
和另一个通过接受更大范围的输入字符串的数字部分来检查错误的地方:
function okdate2(dtstr) {
// First trim off leading and trailing white space
var trimPattern = /(?:'b(.*)'b)/;
dtstr = (dtstr.match(trimPattern))[1];
// If nothing then skip the rest
if (!dtstr) return datetimealert(0);
// Pattern to recognize any 'dddd-dd-dd[ dd:dd]' pattern
var pat = /^(?:('d{4})-('d{1,2})-('d{1,2}))(?: ('d{1,2}):('d{2}))?$/;
var dtm = dtstr.match(pat);
// If this is does not follow the pattern: get out
if (!dtm) return datetimealert(0);
// convert each group to a number
// if no time notation the corresponding groups become NaN
for (var i = 1; i < dtm.length; i++) {
dtm[i] = Number(dtm[i]);
}
// Check for correct year interval
if (dtm[1] < 1970 || dtm[1] > 2099) return datetimealert(1);
// Check for correct month notation
if (dtm[2] < 1 || dtm[2] > 12) return datetimealert(2);
// Array with correct numer of days for each month
var mdays = Array(31,28,31,30,31,30,31,31,30,31,30,31);
// Compensate for leap year
if ((((dtm[1] % 4) === 0) && !((dtm[1] % 100) === 0)) || ((dtm[1] % 400) === 0)) {
mdays[1] = 29;
}
// Check the day for the given month
if (dtm[3] < 1 || mdays[dtm[2] - 1] < dtm[3]) return datetimealert(3);
// If only date was given and no time, we are OK
if (isNaN(dtm[4]) && isNaN(dtm[5])) return true;
// This can not happen according to pattern, but ...
if (isNaN(dtm[4]) || isNaN(dtm[5])) return datetimealert(4);
// check given hour
if (dtm[4] > 23) return datetimealert(5);
// Check given minutes
if (dtm[5] > 59) return datetimealert(6);
// If no error
return true;
}
函数datetimealert发出一个带有(希望)正确错误消息的警报,并返回false。
函数带的前导和尾随空格我在表单中使用它们,在"onsubmit"函数中调用它们。我在这里的目的不是讨论这两个函数,但当然欢迎对它们进行评论。
在我的Grails应用程序中,我使用了由Trent richardson的jQuery时间选择器插件扩展的jQuery日期选择器,所以我得到一个文本字符串作为结果。我以如下形式调用datetimepicker:
<form ...
<dl ...
<dt>Start date <span class="required-indicator">*</span></dt>
<dd>
<div class="fieldcontain ${hasErrors(bean: todoInstance, field: 'startdate', 'error')} required">
<g:textField name="startdate" id="datepicker" class="datepicker"
value="${formatDate(format:'yyyy-MM-dd HH:mm',date:todoInstance?.startad)}" required="" />
</div>
</dd>
...
对于所有其他的"必填"字段,我得到一个小的"工具提示"之类的消息告诉我
输入值现在,我想在我的grails应用程序中使用我的两个datetime javascript,但我不希望弹出警告框,我想在域类的静态约束部分中使用它们,并以与其他字段相同的方式获取我的消息。如何将它们集成到grails中的错误管理系统中?
此错误消息由验证API提供。要实现您自己的自定义验证,您可以使用约束验证器。
<罢工>但是我假设您已经在域类中将字段声明为java.util.Date
,因此您需要在验证器中使用Date对象。默认情况下,Grails使用g:datePicker
处理日期,这将把日期分割为日、月和年字段。罢工>
要将具有某种格式的单个字符串绑定到日期对象,您可以注册一个自定义日期属性编辑器,如下例所示。
Grails验证API用于服务器端验证。在这种情况下,一个选项是JQuery验证UI插件,它通过JQuery提供客户端验证。这个插件支持所有标准的约束,你可以创建你自己的验证(比如你的日期验证),查看extensibility docs会话
- Node.js v6.2.0类扩展不是函数错误
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- React Redux错误页面管理
- Modx数据包管理器ext-all.js错误
- 管理node.js中的运行时错误
- Web 驱动程序管理器更新错误:EACCES,权限被拒绝
- 错误管理器:从标准Java到Servlet
- 使用 django-froala-editor,编辑器在管理页面中工作不会在帖子页面中工作吗?未捕获的类型错误: $(.
- 同步用户管理配置文件更新错误
- 我如何创建转账到管理帐户(错误:“必须提供来源或客户”)
- Redux表单不受应用程序管理,有奇怪的错误
- 谷歌标签管理器解析错误.主要表达
- 我如何解决这个Javascript内存管理错误
- grails中的错误管理
- 当我试图支付到管理帐户时出现错误
- Cordova/Phonegap地理定位插件管理错误
- 如何管理AngularJS中加载指令模板的404错误
- Magento:如何在管理面板中使用JS显示标准错误/成功消息
- Angular 的错误消息“无法实例化模块”仅在资源管理器中