表單數(shù)據(jù)的驗(yàn)證:
前臺(tái)驗(yàn)證:主要是通過(guò)JS驗(yàn)證厚满, 表達(dá)數(shù)據(jù)是否合法!
后臺(tái)驗(yàn)證:通過(guò)后臺(tái)java代碼進(jìn)行驗(yàn)證!
Struts也提供了數(shù)據(jù)效驗(yàn)的方式库北!
Struts數(shù)據(jù)效驗(yàn)欺栗, 通過(guò)攔截器完成:
<interceptor
name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>
代碼方式驗(yàn)證Action中所有的方法:
1.在idea中直接創(chuàng)建struts項(xiàng)目
2.寫(xiě)注冊(cè)頁(yè)面
3.UserAction.java
4.以及實(shí)體類User.java
5.配置struts.xml
文件目錄結(jié)構(gòu)
- 注冊(cè)頁(yè)面
<%--
Created by IntelliJ IDEA.
User: admin
Date: 2017/5/31
Time: 12:07
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注冊(cè)頁(yè)面</title>
</head>
<body>
<form action="/user_register" method="post">
用戶名:<input type="text" name="user.userName"><br>
密碼:<input type="password" name="user.passWord"><br>
郵箱:<input type="text" name="user.email"><br>
生日:<input type="text" name="user.birth"><br>
<input type="submit" value="注冊(cè)">
</form>
</body>
</html>
- 實(shí)體類User.java
package validation;
import java.util.Date;
/**
* Created by admin on 2017/5/31.
*/
public class User {
private String userName;
private String passWord;
private String email;
private Date birth;
@Override
public String toString() {
return "User{" +
"userName='" + userName + '\'' +
", passWord='" + passWord + '\'' +
", email='" + email + '\'' +
", birth=" + birth +
'}';
}
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 getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
}
- action類UserAction
package validation;
import com.opensymphony.xwork2.ActionSupport;
/**
* Created by admin on 2017/5/31.
*/
public class UserAction extends ActionSupport {
//封裝數(shù)據(jù)
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
//數(shù)據(jù)校驗(yàn)
public void validateRegister() {//驗(yàn)證指定的方法
//用戶名
if (user.getUserName() == null || "".equals(user.getUserName())) {
super.addFieldError("userName", "用戶名不能為空!");
}
//密碼
if (user.getPassWord() == null || "".equals(user.getPassWord())) {
super.addFieldError("passWord", "密碼不能為空允蚣!");
}
}
//業(yè)務(wù)處理方法
public String register(){
System.out.println(user);
return SUCCESS;
}
}
- struts.xml配置
1.配置數(shù)據(jù)效驗(yàn)過(guò)濾器validate.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="validate" extends="struts-default">
<action name="user_*" class="validation.UserAction" method="{1}">
<result name="success">/register.jsp</result>
</action>
</package>
</struts>
2.在struts.xml中引入數(shù)據(jù)校驗(yàn)配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<include file="validation/validate.xml"/>
</struts>
XML方式驗(yàn)證Action中所有的方法:
總結(jié)代碼方式驗(yàn)證:
- 繁瑣于颖,設(shè)計(jì)很多重復(fù)的驗(yàn)證邏輯!例如:非空驗(yàn)證厉萝、數(shù)值驗(yàn)證恍飘、email、日期等谴垫。
- Struts對(duì)于常用的驗(yàn)證章母,進(jìn)行了封裝,即提供了驗(yàn)證器翩剪, 驗(yàn)證指定的常用業(yè)務(wù)邏輯乳怎!
可以在jar包里找到該文件,其路徑為:\struts04\lib\xwork-core.jar!\com\opensymphony\xwork2\validator\validators\default.xml
在struts里面提供了所有通用的驗(yàn)證器
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator Definition 1.0//EN"
"http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd">
<!-- START SNIPPET: validators-default -->
<validators>
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>
<!-- END SNIPPET: validators-default -->
創(chuàng)建一個(gè)xml驗(yàn)證器前弯,需要遵循一定的驗(yàn)證規(guī)則
- xml文件名稱語(yǔ)法:ActionClassName-validation.xml
注意:此xml需要與當(dāng)期要驗(yàn)證的action在同一個(gè)目錄:
舉例:UserAction-validation.xml - 例子
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.dtd">
<validators>
<!--驗(yàn)證表的每一個(gè)字段field表示-->
<field name="user.userName">
<!--指定使用的驗(yàn)證器-->
<field-validator type="requiredstring">
<!--驗(yàn)證錯(cuò)誤的提示-->
<message>用戶名不能為空蚪缀!</message>
</field-validator>
</field>
<!-- 驗(yàn)證password -->
<field name="user.passWord">
<!-- 非空 -->
<field-validator type="requiredstring">
<message>密碼不能為空!</message>
</field-validator>
<!-- 長(zhǎng)度 -->
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">8</param>
<message>密碼必須為6-8位恕出!</message>
</field-validator>
</field>
<!-- 驗(yàn)證日期 -->
<field name="user.birth">
<field-validator type="date">
<message>日期格式不對(duì)询枚!</message>
</field-validator>
</field>
<!-- 驗(yàn)證Email -->
<field name="user.email">
<field-validator type="email">
<message>郵箱格式錯(cuò)誤!</message>
</field-validator>
</field>
</validators>
驗(yàn)證:
當(dāng)不遵循格式隨意輸出時(shí):
控制臺(tái)就會(huì)出現(xiàn)錯(cuò)誤:
當(dāng)遵循格式輸出時(shí):
控制臺(tái)顯示的結(jié)果為: