9.struts2数据校验
手动编码方式:
1.数据校验包含两种方式,第一种是手动编码完成数据校验方式,第二种是通过配置文件完成数据校验方式(重点掌握这种方式)。
2.手动编码校验方式
* 开发的步骤
> 步骤一: 封装数据
> 步骤二: 实现校验Action ,必须继承ActionSupport 类
> 步骤三: 覆盖validate方法,完成对Action的业务方法 数据校验 this.addFieldError (ActionSupport提供)
> 步骤四: 在jsp中 通过 <s:fieldError/> 显示错误信息
* 针对的是Action中所有的方法进行校验。
> 让Action继承ActionSupport类,重写ActionSupport类中的validate()方法,在该方法中完成数据校验。
* 针对的是Action中某个方法完成校验。
> 手动在Action中编写一个方法,方法名称是validate7要校验的方法的名称() 例如:public void validateAdd(){ }
* Action中有一个save的方法,只校验save方法。
* validateSave() -- 使用该方法去校验save的方法
* 数据校验测试的JSP页面代码
<h3>手动数据校验</h3>
<form action="${ pageContext.request.contextPath }/reg1.action" method="post">
用户名:<input type="text" name="username" /><br/>
密 码:<input type="password" name="password" /><br/>
<input type="submit" value="注册"/><br/>
</form>
3.总结手动的校验的方式
* 手动校验分成两种
* 针对的是Action类中的所有的方法
* 重写validate()方法,该方法是属于ActionSupport类,必须要继承该类。
* 针对的是Action类中的某一个方法的校验。
* 要继承ActionSupport类,校验某个方法,需要自己定义一个新的方法
* 方法名称是规定:public void validateRegist(){ }
* 编写的是Action都需要继承ActionSupport类
* 注意:代码校验 不适用于 大型项目, 流程数据复杂时,开发量和维护量 都会很大
demo3.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>手动数据校验</h3>
<s:fielderror/>
<form action="${ pageContext.request.contextPath }/reg4.action" method="post">
用户名:<input type="text" name="username" /><br/>
密 码:<input type="password" name="password" /><br/>
<input type="submit" value="注册"/><br/>
</form>
</body>
</html>
RegistAction:
package demo3;
import com.opensymphony.xwork2.ActionSupport;
/**
* 手动的校验方式
* @author mjl
*
*/
public class RegistAction extends ActionSupport{
//获取到表单输入的数据
private String username;
private String password;
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
/**
* 手动校验数据的方法
* 校验Action类中的所有的方法(不符合开发的需求)
*/
/*public void validate() {
//判断用户名是否为空
if(username==null || username.trim().isEmpty()){
//需要提示信息
this.addFieldError("username", "用户名不能为空");
}
}*/
/**
* 手动校验,只校验add方法
*/
public void validateAdd(){
if(username==null || username.trim().isEmpty()){
//需要提示信息
this.addFieldError("username", "用户名不能为空");
}
}
//添加用户
public String add(){
System.out.println("执行了");
return NONE;
}
//查询用户
public String sel(){
System.out.println("查询了");
return NONE;
}
}
xml文件方式:
RegistAction2:
package demo3;
import com.opensymphony.xwork2.ActionSupport;
/**
* 使用xml的方式进行数据的校验
* @author mjl
*
*/
public class RegistAction2 extends ActionSupport{
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("执行了。。。");
return NONE;
}
}
RegistAction2-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"> <validators> <!-- 校验的字段 --> <field name="username"> <!-- 校验的规则 type要选择的规则:用户名是不能为空的,空格也不行 --> <field-validator type="requiredstring"> <!-- 提示的信息 --> <message>亲,用户名是不能为空的2!</message> </field-validator> </field> <!-- 校验密码 --> <field name="password"> <field-validator type="stringlength"> <!-- 规定密码的长度 --> <param name="minLength">4</param> <param name="maxLength">8</param> <message>亲,密码的长度需要在4到8位2!</message> </field-validator> </field> </validators>
案例:用模型驱动和xml方式数据校验
demo4.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>注册页面</h3>
<s:fielderror/>
<form action="${ pageContext.request.contextPath }/reg6.action" method="post">
密码:<input type="password" name="password"/><br/>
确认密码:<input type="password" name="repassword"/><br/>
年龄:<input type="text" name="age"/><br/>
生日:<input type="text" name="birthday"/><br/>
邮箱:<input type="text" name="email"/><br/>
<input type="submit" value="注册"/>
</form>
</body>
</html>
Person:
package demo4;
import java.util.Date;
public class Person {
private String password;
//确认密码
private String repassword;
private int age;
private Date birthday;
private String email;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRepassword() {
return repassword;
}
public void setRepassword(String repassword) {
this.repassword = repassword;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
RegistAction6:
package demo4;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/**
* 封装数据(采用的是模型驱动的方式)
* 数据校验(采用xml的方式)
* @author mjl
*
*/
public class RegistAction6 extends ActionSupport implements ModelDriven<Person>{
private Person person=new Person();
public String regist(){
System.out.println("执行了");
return NONE;
}
public Person getModel() {
return person;
}
}
RegistAction6-reg6-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"> <validators> <field name="repassword"> <field-validator type="fieldexpression"> <!-- 传递参数,判断的条件--> <param name="expression">password==repassword</param> <message>两次密码不一致</message> </field-validator> </field> <field name="age"> <field-validator type="int"> <param name="min">18</param> <param name="max">29</param> <message>年龄需要在18-29之间</message> </field-validator> </field> <field name="email"> <field-validator type="email"> <message>亲,邮箱格式不正确</message> </field-validator> </field> </validators>

浙公网安备 33010602011771号