Validation 表单验证 插件 jQuery 验证 数字 日期 (二)

本文介绍如何使用自定义规则增强表单验证,实现select下拉框验证及远程验证,提升用户体验。此外,还讨论了验证信息的国际化配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

还可以定义其他的验证规则。应用自定义的规则很容易,自定义规则和内置规则用法是一样的。

在此,提供一个有用的验证规则,那就是针对select下拉框的验证:

Javascript代码
/**
* 自定义验证规则——增加对select的验证
*/
$.validator.addMethod(
"selectNone", // name验证方法名
function(value, element) // 验证规则
{
if (value == "none") // select默认值需要设置为"none"(当然可以自定义其他值)
{
return false;
}
else
{
return true;
}
},
"必须选择一项" // 默认验证消息(自定义规则信息的国际化是否不起作用?)
);

/**
* 自定义验证规则——增加对select的验证
*/
$.validator.addMethod(
"selectNone", // name验证方法名
function(value, element) // 验证规则
{
if (value == "none") // select默认值需要设置为"none"(当然可以自定义其他值)
{
return false;
}
else
{
return true;
}
},
"必须选择一项" // 默认验证消息(自定义规则信息的国际化是否不起作用?)
);


二、验证信息的国际化

验证信息国际化是很方便的,默认验证信息是英文的,只需导入validation已写好的国际化文件,如:
Javascript代码
<script type="text/javascript" src="scripts/jQuery/plugins/jquery.validate.js"></script>

<script type="text/javascript" src="scripts/jQuery/plugins/jquery.validate.messages_cn.js"></script>

<script type="text/javascript" src="scripts/jQuery/plugins/jquery.validate.js"></script>

<script type="text/javascript" src="scripts/jQuery/plugins/jquery.validate.messages_cn.js"></script>

在验证时,去掉message,提示信息就会变成中文。

可以改国际化文件中的提示信息内容,使其更加个性化、符合项目要求。另外,如果在验证时使用了message,message中指定的字段提示信息会覆盖国际化文件中的信息。

这里有一个问题,国际化时似乎没法根据浏览器的locale来自动识别该用什么语言来显示。笔者测试了一下,当导入多国语言文件时,总是会使用最后一次导入的语言。因此,要实现真正的国际化,可以通过一个链接之类的来选择语言,然后用javascript来导入不同的语言文件。

三、远程验证

远程验证很有用,用户体验很好,因为不需要提交表单就知道自己注册用户的是否已被注册。validation插件通过remote规则来实现验证。在此讲解一下如果将请求提交给struts2的action来验证。

remote规则的格式为:
Javascript代码
remote: {
url: "ajax/validateUserName.action", //后台处理程序
type: "post", //数据发送方式
dataType: "json", //接受数据格式
data: { //要传递的数据,默认已传递应用此规则的表单项
email: function() {
return $("#email").val();
}

}

remote: {
url: "ajax/validateUserName.action", //后台处理程序
type: "post", //数据发送方式
dataType: "json", //接受数据格式
data: { //要传递的数据,默认已传递应用此规则的表单项
email: function() {
return $("#email").val();
}

}

由于remote规则只允许后台返回true或false,因此struts2的action得不同于一般的action,不能返回一个字符串,然后dispatch一个视图之类的。研究之后,发现struts2中有一种result类型:stream,通过该类型可以实现返回true或false。action代码如下:
Java代码
view plaincopy to clipboardprint?
// 定义返回的输入流
private InputStream inputStream;

// 定义需要到远程验证的字段
private String userName;
private String email;

// 定义返回值:只能为Boolean类型
private Boolean valid;

/**
* Action执行的方法:实现远程验证,将业务逻辑交给后台处理,并接收结果
* 同时,将结果返回。
* @return
*/
public String execute()
{
// 根据userName判断该SP/CP是否已被注册;根据email判断该账号是否已被占用
if(spcpPreApprovalService.existSpcpAccount(userName, email))
{
valid = false;
}
else
{
valid = true;
}

inputStream = new ByteArrayInputStream(valid.toString().getBytes());

return Action.SUCCESS;
}
// 省略getter、setter

view plaincopy to clipboardprint?
// 定义返回的输入流
private InputStream inputStream;

// 定义需要到远程验证的字段
private String userName;
private String email;

// 定义返回值:只能为Boolean类型
private Boolean valid;

/**
* Action执行的方法:实现远程验证,将业务逻辑交给后台处理,并接收结果
* 同时,将结果返回。
* @return
*/
public String execute()
{
// 根据userName判断该SP/CP是否已被注册;根据email判断该账号是否已被占用
if(spcpPreApprovalService.existSpcpAccount(userName, email))
{
valid = false;
}
else
{
valid = true;
}

inputStream = new ByteArrayInputStream(valid.toString().getBytes());

return Action.SUCCESS;
}
// 省略getter、setter


struts.xml文件的配置为:

Xml代码
<package name="ajax" namespace="/ajax" extends="struts-default">
<action name="validateSpId" class="validateSpcpAction">
<result type="stream">
<param name="contentType">text/html</param><!-- 默认为text/plain -->
<param name="inputName">inputStream</param><!-- 默认就为inputStream -->
</result>
</action>
</package>

<package name="ajax" namespace="/ajax" extends="struts-default">
<action name="validateSpId" class="validateSpcpAction">
<result type="stream">
<param name="contentType">text/html</param><!-- 默认为text/plain -->
<param name="inputName">inputStream</param><!-- 默认就为inputStream -->
</result>
</action>
</package>

这样便可以实现远程验证功能。

总结

可以看出validation使表单验证变得很容易,实现起来很轻松。validation插件还有其他一些功能,需要了解可以查看官方文档。

由于写的demo是把公司项目的一些页面改为ajax+struts2,所以在此不方便把所有的代买贴出来。如果遇到什么问题,可以联系我。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值