系列文章目录
前言
表单验证这块之前最基础的(不使用)方式我们都做过了,
那么struts怎么验证表单呢
一、表单验证-服务端Action验证
在正常点的开发当中我们都会在后台去验证一下前端的数据 是否正确,比如用户名不能为空、,密码不能低于6位数等
在struts2里面我们有两种方式验证,
一种是Action验证一种是xml声明式验证
下面我们来看服务端Action验证
1、项目拷贝一下
然后在项目中register2.jsp,把原始的html 表单模块删掉,只留struts标签即可
这里一定要注意一个细节,我们的struts要生效,一定要配置一个过滤器,不能漏掉
不配置的话,struts就不会工作
转换器那些都可以删掉了,这里不需要这些,跟转换器没有关系了
我们运行项目,现在我们点击注册,直接就跳到action里面了
即使我们没有输入用户名,也没有输入密码!!!!
以前我们可以用隐藏域等方式,或者结合后台一起判断
以前的方式:
那么struts也给我们提供了一种表单的验证,怎么验证呢?
然后直接重写一个方法即可
测试的时候我们发现,表单就这样轻而易举的验证了,并且 确实如果表单验证不通过不会执行register方法
就这么简单,简单到你都不知道自己做了什么
* 1.表单一定要用struts的标签:s:form/s:textfield
* 2.addFieldError里的key,是表单的name的值
* 3.validate对于Action来说是全局,也就是action的所有方法都会生效
* 4.在不需要验证的action方法上,可以声明一个注解@SkipValidation,忽略校验
我们继续往下,添加密码的表单验证
下面看另一个有趣的现象,我们把拷贝一下Action
我们现在要访问这个jsp就通过action来访问
注意,表单要必须是用struts的标签(即struts 标签才可以 )如果我们用原生的html标签,这样的表单是不会显示错误信息的
正是因为这个原因,我们开启下一中表单验证的方式
这时候list方法就不会再校验了
第二种:写一个方法,格式:validate+方法名(第一个字母大写)
validateRegister
注意:.只针对方法有效,它是一个局部字段校验
还有一种办法
如果我们不想后面的方法也去执行validate的话,在其它的方法前面加个注解
否则
二、表单验证-xml声明式验证
实际上 表单验证,我们除了在服务器,在action里面写之外还可以再xml里面写
那怎么写呢,我们只需要在action所在包下写一个xml文件,文件格式如下
在action包中声明UserAction-validation.xml文件(前缀要跟Action类名一致)
为了有智能提示,我们需要引入一个.dtd
这种方式配置是全局配置,所有action的方法都会拦截验证
如果其它方法不想验证,也可配置@SkipValidation注解
dtd约束可以在xwork-core的jar包中找
下面我们来看第一种方式
field 表示你要校验的是哪个字段
然后继续
下面这个意思是必填一个字符串
然后就可以测试看看了
测试成功
这是第一种写法,还有第二种写法
测试结果
我们总结一下,第二种方式比较好,自然我们也会更喜欢用
我们可以猜测到,很可能是第一种设计的时候有点没设计好,后面才有了第二种
三、局部声明方式
在action包中声明UserAction-register-validation.xml文件
声明方式 【Action类名-方法名-validation.xml】
xml内容与上面的一样
总结
1.表单一定要用struts的标签:s:form/s:textfield
2.addFieldError里的key,是表单的name的值
3.validate对于Action来说是全局,也就是action的所有方法都会生效
4.在不需要验证的action方法上,可以声明一个注解@SkipValidation,忽略校验
5、注意,是区分大小写的,比如,这里就不能大写
回顾
总结:
第一种重写validate( ) 方法,但是要注意validate方法后所有的方法都会先执行validate( ) 方法,如果validate( ) 方法不通过
后面的方法都不会执行
第二种