Java三大框架SSH之Struts2_004_01:表单验证-服务端Action验证、表单验证-xml声明式验证、控制台出现Reloading就说明服务器重启成功了

系列文章目录

前言

表单验证这块之前最基础的(不使用)方式我们都做过了,
那么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( ) 方法不通过
后面的方法都不会执行
第二种

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值