1、前言
web应用程序,在很多地方都需要对数据进行验证,验证后,给用户一些提示的信息,尽量让用户知道那些信息有误,对输入信息的认证,可以在前台,也可以在后台,在前台可以用js来实现,在后台呢,也可以,如果要自己学验证方法的话
写是可以写出来,但是很繁琐,都一些if和else语句,基于这种考虑,struts提供了很一套很好的验证体系。
这个验证功能要用到上一篇编写的代码,只是修改部分代码,和添加必需的代码。
2、strut验证的种类
strut验证的方式可以说是挺多中的,下面是一些常用的方法。
(1)在继承ActionSupport的动作类中重写validate()方法,至于如何验证,那就是自己编写代码的事情了,由于
承了ActionSupport这个类,而这个类中有几个处理动作错误的方法。如下:
1)addActionError(String anErrorMessage),当动作请求错误时,可以把需要显示给用户的信息添加进去,
在前台则采用struts内置的标签<s:actionerror/>就可以把在后台添加进来的信息实现给用户了。
2)addActionMessage(String aMessage),这个方法可以将需要显示的信息显示给用户,在前台采用标签
<s:actionmessage/>来显示相关的信息。
3)addFieldError(String fieldName,String errorMessage),这个方法是在字段类型输入不正确时候用到,
在前台用<s:fielderror/>就可以将我们在后台添加的错误信息显示给用户看了。
(2)如果表单使用的标签都是struts内置的话,那么当用户输入的数据类型不合法时,在后台无法进行自动转换时,
它会自动提示给用户Invalid field value for field "fieldName",虽然可以提示,但是总感觉这个提示太过于笼
统,用户可能也不理解。这很好解决,struts程序员也想到了这点,这时,我们只要编写一个properties文件就
可以改变显示的内容信息了,它的格式是,名字actionName.properities,这个文件要和对应的动作类在同一个
目录下,其中的actionName就是动作类的名字,这个文件的内容也有特定的格式,invlid.fieldvalue.字段名
="自己想显示的内容", 例如,在前台有个name="age"的输入框,那么就应该写
invalid.fieldvalue.age="请输入整数类型".
(3)由于struts内嵌了xwork框架,所以它支持xwork提供的专业的数据验证体系,其实我们需要做的很事情很少
只需要编写一个xml文件,xwork会自动调用内部的方法为我们验证。命名规则是:ActionName-validation
.xml,也要把这个文件放到对应的动作类目录下。
3、用实例来说话,源码和上一篇的博客一样,下面是需要修改的。
(1)对应上边的第一种方法。
在RegisteAction类中重写ActionSupport的validate()方法,如下
public void validate(){
if(username==null||username.length()<6||username.length()>12){
this.addActionError("用户名无效");
}
if(password==null){
this.addActionError("密码不能为空");
}
if(repassword==null){
this.addActionError("确认密码不能为空");
}
if(password!=null&&repassword!=null&&password.equals(repassword)){
this.addActionError("两次输入的密码不一致");
}
if(birthday!=null&&graduated!=null){
if(graduated.before(birthday)){
this.addActionError("毕业日期不能在出生日期之前");
}
}
if(point==null){
this.addActionError("坐标不能为空,输入的两个数字要以逗号隔开");
}
}
在registe2.jsp中输入如下:
提交后,显示如下:
说明:可以看到,在顶部有黑点的提示信息就是在RegisteAction2类中的validate方法中编写的,在前台用了
<s:actionerror/>标签显示出来,由于这个表单的标签都是采用struts内置的,所以当输入的类型与后
台不匹配时,它会自动提示错误信息,但是这样的信息用户是很难看懂的。
(2)对应上边的第二种方法,改变显示的内容,显示一些用户容易看懂的信息。
创建一个properties文件,文件名为RegistAction.properties,由于采用的编码不一样,所以在可视化界面
时是如下:
点击源码设计时如下:
invalid.fieldvalue.username=\u7528\u6237\u540D\u4E0D\u53EF\u7528
invalid.fieldvalue.password=\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A
invalid.fieldvalue.birthday=\u51FA\u751F\u65E5\u671F\u4E0D\u53EF\u7528\uFF0C\u683C\u5F0F\u5982\uFF1A2011-03-05
invalid.fieldvalue.graduate=\u6BD5\u4E1A\u65E5\u671F\u4E0D\u53EF\u7528\uFF0C\u683C\u5F0F\uFF1A2011-04-05
invalid.fieldvalue.point=\u5750\u6807\u4E0D\u53EF\u7528\uFF0C\u683C\u5F0F\u5982\uFF1A3\uFF0C4
都是一些我们看不懂的信息,但是没有关系,添加了这个文件后,
现在再看看效果:
提示的信息确实改变了,这就是RegisteAction.properties文件起到的效果。
(3) 采用xwork框架内置的验证机制
RegisteAction-validation.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
<validators>
<field name="username">
<field-validator type="requiredstring">
<param name="trim"></param>
<message>请填写字符类型</message>
</field-validator>
<field-validator type="stringlength">
<param name="maxLength">6</param>
<param name="minLength">20</param>
<message>长度在6到20个字符之间</message>
</field-validator>
<field-validator type="required">
<param name=""></param>
<message>用户名不能为空</message>
</field-validator>
</field>
<field name="birthday">
<field-validator type="date">
<param name="min">1900-01-01</param>
<param name="max">2012-12-12</param>
<message>出生时间在${min}和${max}之间</message>
</field-validator>
</field>
</validators>
说明:这个文件的标签有很多,不可能把它全都背下来,学习得有技巧,我们可以查看xwork类库下的源码,里面有
很详细的属性,它的位置如下图所示:
点击default.xml这个文件,显示的内容如下:
说明:这个文件一目了然,name属性对应于ActionName-validation.xml中的
<field-validator type="requiredstring">的type值,而<param name="trim"></param>中的
name属性从哪里来呢,那就得找到上边对应的类,里面有什么属性,这个name类里面就可以填写什么。
好了,看看效果吧,在看效果前,我先把自己在RegisteAction中的validate方法中编写的验证方法注释掉。
效果如下:
一样可以验证,当然xwork还提供了很多类型数据的验证,比如邮件,url等的验证,如果要我们自己编写的话,
考虑的可能不是很周到,但是利用内置的验证,则可以很好得给用户提示信息。
4、小结一下:
strut的验证方法有很多,也很全面,各种验证方法可以同时存在,在适当的时候适当的地方选择适当的验证才是最好
的方法。
- 大小: 3.4 KB
- 大小: 10.7 KB
- 大小: 3.7 KB
- 大小: 10.6 KB
- 大小: 12.8 KB
- 大小: 35.4 KB
- 大小: 8.7 KB
分享到:
相关推荐
commvault的api接口的postman导入文档
"基于模型预测控制的无人驾驶车辆运动学验证:Simulink与Carsim仿真结果对比与模型解析",无人驾驶车辆模型预测控制 自动驾驶 汽车运动学模型验证 simulink和Carsim仿真结果对比 1.基于matlab2021a和Carsim2020 2.提供模型相关的说明文档 ,核心关键词:无人驾驶车辆模型预测控制; 自动驾驶; 汽车运动学模型验证; simulink; Carsim仿真结果对比; MATLAB 2021a; Carsim 2020; 模型说明文档。,基于Matlab与Carsim的无人驾驶车辆模型预测控制与仿真结果对比分析
基于QRBiGRU双向门控循环单元的复杂时间序列预测模型研究——Matlab分位数回归与多图多指标评估模型优化案例。,Matlab实现基于QRBiGRU分位数回归双向门控循环单元的时间序列区间预测模型: 1.Matlab实现基于QRBiGRU分位数回归双向门控循环单元的时间序列区间预测模型 2.多图输出、多指标输出(MAE、RMSE、MSE、R2),多输入单输出,含不同置信区间图、概率密度图; 3.data为数据集,功率数据集,用过去一段时间的变量,预测目标,目标为最后一列,也可适用于负荷预测、风速预测;MainQRBiGRUTS为主程序,其余为函数文件。 BiGRU分位数预测得到不同置信区间下的风电功率结果如图所示。 可以看出,不同置信度条件下的预测区间与风电功率实际值的波动大致相同,表明本文的方法能够准确预测风电功率变化,此外在实际值变化剧烈的地方置信区间越宽,表明预测可信度变低,这也与实际情况相符合。 对比预测未来不同时间步的预测区间,预测的误差在增大。 根据BiGRU分位数预测未来90min后的结果,采用核密度估计,生成风电功率的概率密度曲线。 如图所示。 可以看到,风电功率实
MATLAB多相材料相场断裂分析:纤维基体界面三相的载荷位移曲线可视化研究,matlab多相材料相场断裂,图中包含纤维基体界面三相,并输出载荷位移曲线。 paraview可视化 ,关键词:Matlab;多相材料;相场断裂;纤维基体界面三相;载荷位移曲线;Paraview可视化,"MATLAB相场断裂分析:多相材料中纤维基体界面的三维可视化与载荷位移曲线输出"
基于MATLAB的FFT滤波技术:实现波形数据谐波分析、频段清除与提取的全面解决方案,基于matlab的FFT滤波,可以实现对simulink模型中示波器的波形数据或者外部mat数据、csv数据进行谐波分析(FFT)和自定义频段清除,对已有数据特定频段的数据进行提取也可以。 优点是滤波前后波形无相位滞后,幅值衰减可补偿,不足之处在于不支持实时滤波。 图一是将图二的信号(含三次谐波)进行140hz-150hz频段谐波清除前后的时域及频谱图,图3是对给定数据进行特定频段信号提取。 ,基于MATLAB的FFT滤波; 谐波分析; 频段清除; 波形无相位滞后; 幅值衰减可补偿; 数据特定频段提取,MATLAB的FFT滤波技术:数据频谱分析与自定义频段谐波清除与提取
c++编译器,适用于IDE没有自带编译器的
2020年09月Scratch一级理论B
"Comsol连续体束缚态BIC探究:一维光栅与二维光子晶体板的能带与Q因子计算",Comsol连续体中的束缚态BIC。 涉及能带计算与Q因子计算,包含一维光栅和二维光子晶体板。 注: 不包含拓扑荷计算。 ,核心关键词:Comsol连续体;束缚态BIC;能带计算;Q因子计算;一维光栅;二维光子晶体板。,《Comsol连续体束缚态BIC能带计算与Q因子探索》
MAKINO系列机床操作与维修设定指南:PRO3操作、S系列使用、培训课程及安装手册,MAKINO 牧野 PRO3 维修设定操作 A55 PRO3操作说明书 日文.pdf A55卧加工作台旋转后加工原点计算.xlsx A61_SPECS.pdf MAKINO PRO3 V55-Operation-Guide 英文.pdf MAKINO S 系列PRO5 使用说明书PIC-Makino-S33-S56-0209.pdf MAKINO 培训课程Schulung_英文.pdf MAKINO-F3F5安装手册MANUAL 英文.pdf Makino-GF8主轴头取汲说明书.pdf MAKINO-PRO3-ProgManua英文l.pdf PIC-Makino-a61-0209.pdf V33 V55 -Series-Operation-485a-9911e英文.pdf V55-Maintenance-Guide-4v2b1563英文.pdf 牧野J5机床说明书J5_OPERATION_中文.pdf 牧野Professional5使用说明书摘要(a1系列 a51 a61 a71 a81 a82
2022年7月信息技术服务管理体系
2019年11月职业健康安全管理体系
"Comsol一维光子晶体ZAK相位计算方法详解:含MPH文件与MATLAB代码的实践指南",Comsol一维光子晶体zak相位计算,包含mph文件和matlab代码。 ,核心关键词:Comsol一维光子晶体; zak相位计算; mph文件; matlab代码; 计算过程。,基于Comsol的一维光子晶体:Zak相位计算与mph及Matlab代码解析
SWOT分析培训
GBT27053复习备考
"Java开源海外跨境电商购物商城源码与TikToK内嵌商城系统源码:多语言支持,全球市场触手可及的在线外贸商城解决方案",Java开源海外跨境电商购物商城源码,TikToK内嵌商城系统源码,外贸商城在线,附带搭建教程 提供搭建部署文档、提供一年更新服务,协助资料准备,服务器域名等第三方资料自备 二十一种语言,可以做很多国家的市场,支持商家入驻,多店铺等等,还有币可以切美元USD或越南盾VND 访问网站:tiktok898点com 服务器配置:内存要高:最低:8H16G 服务器系统:ubuntu 20.04 ,关键词:Java开源; 跨境电商; 购物商城源码; TikToK内嵌商城; 外贸商城; 搭建教程; 部署文档; 更新服务; 商家入驻; 多店铺; 货币切换; 美元USD; 越南盾VND; 网站访问; 服务器配置; 高内存; 8H16G; ubuntu 20.04; 资料准备; 第三方资料。,海外多语种跨境电商平台源码:TikToK内嵌商城系统,支持商家入驻与货币切换
Java项目博物馆管理系统
2020年12月C语言一级
2021月12月Python一级理论
MATLAB扩展卡尔曼滤波与无迹卡尔曼滤波程序:带误差对比与数字显示的完整实现,MATLAB编写的EKF和UKF滤波程序源代码 扩展卡尔曼滤波、无迹卡尔曼滤波的MATLAB程序,有误差对比图像和最大误差数字的显示。 只有一个m文件,打开就能运行。 带中文注释。 ,EKF; UKF; MATLAB源代码; 误差对比图像; 最大误差数字; 中文注释,"MATLAB中EKF与UKF滤波程序源代码:一码运行,带误差对比与注释"
扩展卡尔曼滤波算法在辨识永磁同步电机转动惯量中的实际应用,采用S函数编写及参考资料详解,扩展卡尔曼滤波(ekf)辩识永磁同步电机电机转动惯量,s函数编写,附参考资料 ,核心关键词:扩展卡尔曼滤波(EKF); 永磁同步电机; 电机转动惯量辨识; S函数编写; 附参考资料,"基于扩展卡尔曼滤波的永磁同步电机转动惯量S函数辨识法"