struts2学习之表单校验的两种方式
来源:互联网 发布:淘宝网址怎么找 编辑:程序博客网 时间:2024/05/16 10:41
基于覆盖validate方法的表单校验
Action类一般都继承ActionSupport类。
通过覆盖ActionSupport类的validate方法即可在自己的Action类中校验输入项的值。
校验动作类中的所有方法
UserAction类
package com.struts2.action.example;import java.io.Serializable;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport implements Serializable { private static final long serialVersionUID = 7553541763848145723L; private String username;// 用户名不能为空,还要去掉首尾空格 private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String add() { System.out.println("执行了user的add方法"); return SUCCESS; } public String update() { System.out.println("执行了user的update方法"); return SUCCESS; } //对动作类中的所有方法进行验证 @Override public void validate() {//验证方法。只考虑不符合条件的 if(username==null||"".equals(username.trim())){ addFieldError("username", "用户名不能为空"); } if(password==null||!password.matches("\\w{6,16}")){ addFieldError("password", "密码不能为空且必须是6~16位的大小写字母或数字"); } }}
校验动作类中的指定方法
将上面动作类的validate方法改写如下
public void validateAdd() { if (username == null || "".equals(username.trim())) { addFieldError("username", "用户名不能为空"); } if (password == null || !password.matches("\\d{3,6}")) { addFieldError("password", "密码不能为空且必须是3~6位的数字"); }}
即指定只校验add方法。
形如public void validateXxx()的方法,即为校验指定Xxx方法,Xxx代表的是要验证的动作方法名,要把动作方法名的首字母变为大写。
struts.xml内容
<package name="validation" namespace="/validation" extends="struts-default"> <action name="user_*" class="com.struts2.action.example.UserAction" method="{1}"> <result name="success">/WEB-INF/jsp/success.jsp</result> <result name="input">/{1}User.jsp</result> </action></package>
name=user_*,为使用通配符的方式访问动作类中指定的方法
method={1},为使用占位符的方式获取通配符中的方法名
addUser.jsp内容
<form action="${pageContext.request.contextPath}/validation/user_add.action" method="post"> 用户名:<input type="text" name="username" value="${param.username }"/><s:fielderror fieldName="username"/><br/> 密码:<input type="password" name="password" value="${param.password }"/> <s:fielderror fieldName="password"/><br/> <input type="submit" value="保存"/></form>
访问地址http://localhost:8080/Struts2/addUser.jsp
直接点提交按钮提示如下:
按validation方法里的逻辑填写正确的输入项后,控制台输出结果如下:
成功通过了验证,并执行了Action类的add方法。
基于xml文件的表单校验
校验动作类中的所有方法
把动作类的validate方法注释掉,并添加UserAction-validation.xml内容
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"><!-- 基于配置文件的表单验证1,动作类中指定的方法进行验证: 配置文件名:动作类名-动作名(配置文件中的动作名)-validation.xml,如,UserAction-user_add-validation.xml2,验证动作类中的所有方法: 配置文件名:动作简单类名-validation.xml,如,UserAction-validation.xml --> <validators> <validator type="requiredstring"> <param name="fieldName">username</param> <message>用户名不能为空!</message> </validator> <field name="password"> <field-validator type="requiredstring"> <message>密码不能为空!</message> </field-validator> <field-validator type="regex"> <param name="regex"><![CDATA[\w{6,16}]]></param> <message>密码可以为6~16位数字和字母的组合!</message> </field-validator> </field> </validators>
普通校验和字段校验
普通校验
eg:
<validator type="requiredstring"> <param name="fieldName">username</param> <message>用户名不能为空!</message></validator>
字段验证
一般比普通验证更可取,因为可设置多个字段验证器
<field name="username"> <field-validator type="requiredstring"> <message>用户名不能为空!</message> </field-validator> <field-validator type="email"> <message>用户名必须邮箱账号!</message> </field-validator></field>
校验动作类中的指定方法
只要把上面的校验文件名改成UserAction-user_add-validation.xml即可。
其中user_add匹配struts.xml文件中的user_*
xml校验配置文件名的写法
以下两种写法有共同的验证效果
<actionClass>-validation.xml<actionClass>-<actionAlias>-validation.xml
我们可将常见(共同)的校验写在<actionClass>-validation.xml
中,更具体的上下文内容写在<actionClass>-<actionAlias>-validation.xml
中,
框架将验证这两个验证配置文件中可用的验证器。如果两个验证配置文件中定义了一样的验证器,那么当验证不通过时,将发现2个错误,这是由于struts2框架将合并发现在两个验证配置文件中的验证信息。
已定义的验证器
在com/opensymphony/xwork2/validator/validators/default.xml文件中定义。
包括:
- conversion validator
- date validator
- double validator
- email validator
- expression validator
- fieldexpression validator
- int validator
- regex validator
- required validator
- requiredstring validator
- short validator
- stringlength validator
- url validator
- visitor validator
- conditionalvisitor validator
Action类的验证器是怎样被找到
struts2框架将搜索action的继承树寻找这个action类默认校验的接口和父类。
总结
- 当用户按下注册表单提交按钮,Struts2将用户的输入传送到Action或javabean的实例字段。然后,Struts2会自动执行validate方法。如果有任何的if语句为真,Struts2将自动调用其addFieldError方法(我们的Action类继承扩展了ActionSupport)添加错误信息。
如果有任何错误已被添加那么Struts2将不会进行调用execute方法。Struts2框架将返回“input”作为调用Action后的结果。 - 形如UserAction-validation.xml验证文件必须和起动作类放在同一包下,否则不起作用。
- 当使用字段验证时,字段验证语法总是更可取比使用普通验证语法,因为它有利于根据字段字段校验分组。这是非常方便特别是如果一个字段需要有许多字段验证,这几乎总是如此。
- Action类中的validate方法优先于execute方法当被struts框架调用时,若验证出错,将返回“input”,如验证通过,则调用execute方法并返回execute方法的返回值。
以上。。。
- struts2学习之表单校验的两种方式
- 力所能及之struts2校验的两种方式
- struts2学习(一)--表单验证的两种方式
- struts2 两种校验方式
- Struts2-表单验证的两种方式
- struts2 表单验证的两种方式
- Struts2-表单验证的两种方式
- Struts2-表单验证的两种方式
- Struts2-表单验证的两种方式
- Struts2-表单验证的两种方式
- Struts2之validate数据校验两种方式
- 【Struts2七】struts2获取表单元素的两种方式
- Struts2 表单校验(2种方式)
- Struts2后台校验两种方式
- struts2在学习(十)--表单验证的两种方式
- DOM(三)-09-(示例-表单校验-表单提交的两种方式)
- Struts2校验的两种实现方式(使用内置校验和手动编写)
- Struts2中防止表单重复提交的两种方式
- Linux入门:系统分区及挂载点
- va_start和va_end使用详解
- 内核读写文件
- 动态规划之背包问题
- Linux部署项目总结
- struts2学习之表单校验的两种方式
- iOS开发系列之常用自定义控件开发集—自定义下拉列表按钮控件开发
- Aerospike-Architecture系列之数据模型(Data Model)
- Spring MVC详解
- Android Window、PhoneWindow、WindowManager、Activity学习心得 第一弹
- Suricata配置文件说明1
- 对ContentProvider中getType(Uri uri)和android.intent.category.DEFAULT的理解
- http接口测试工具postman
- 输出成绩(第三章第六题0