Struts2--驗證框架
阿新 • • 發佈:2017-09-22
html4 dexp get ftw exec req 復制 lib cnblogs
Struts2的驗證通過配置xml或者註解的方式。依賴與validationheworkflow接口(被默認的攔截器桟引入)。validation接口執行驗證並且創建一些列的錯誤域。workflow接口檢查驗證錯誤的狀態,一旦發現,就默認返回"input",
先看一個簡單的驗證實例:
View Code View Code View Code View Code View Code執行結果:
從系統自帶的驗證器配置文件validators.xml文件可以看出,系統能夠自帶了以下的配置文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator Config 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd"> <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>
自定義驗證
在struts2中要想實現驗證,可以實現通過實現以下幾個接口的方式來實現
- com.opensymphony.xwork2.validator.validators.ValidatorSupport
- com.opensymphony.xwork2.validator.validators.FieldValidatorSupport
- com.opensymphony.xwork2.validator.validators.RangeValidatorSupport
- com.opensymphony.xwork2.validator.validators.RepopulateConversionErrorFieldValidatorSupport
實例:
package com.fuwh.model; public class Student { //首先編寫一個學生實體類 private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } }<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page import="java.util.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>表單界面</title> </head> <body> <p>然後編寫一個前臺註冊頁面</p>
<s:fielderror></s:fielderror>
<s:form method="post" action="validationAction"> <s:textfield name="stu.name" label="名字"/> <s:textfield name="stu.age" label="年齡"/> <s:submit value="註冊"></s:submit> </s:form> </body> </html>
package com.fuwh.model; import com.opensymphony.xwork2.ActionSupport; public class ValidationAction extends ActionSupport{ private static final long serialVersionUID = 1L; private Student stu; public Student getStu() { return stu; } public void setStu(Student stu) { this.stu = stu; } //這是action的默認入口方法 @Override public String execute() throws Exception { // TODO Auto-generated method stub System.out.println("execute the default method!!!-->>"+stu); return SUCCESS; } }
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <!-- 開啟debug模式,會自動加載配置文件等等,不用每次更改了配置文件就去重新啟動下服務器 --> <constant name="struts.devMode" value="true" /> <!-- 配置action --> <package name="validation" extends="struts-default"> <action name="validationAction" class="com.fuwh.model.ValidationAction"> <result name="success">success.jsp</result> <!-- 必須要有input --> <result name="input">index.jsp</result> </action> </package> </struts>
package com.fuwh.model; import com.opensymphony.xwork2.validator.ValidationException; import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; public class MyValidator extends FieldValidatorSupport{ @Override public void validate(Object object) throws ValidationException { // TODO Auto-generated method stub String fieldName=this.getFieldName(); //取得字段名 String fieldValue=this.getFieldValue(fieldName, object).toString(); //取得字段值 if(fieldValue.indexOf("日")!=-1){ //添加錯誤信息 this.addFieldError(fieldName, object); } } }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator Config 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd"> <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.xml文件添加到classpath,然後在裏面添加自己的驗證器MyValidator name:就是自己的驗證器的名字,以後在action名-validation.xml文件中配置驗證的時候需要使用 --> <validator name="myvalidator" class="com.fuwh.model.MyValidator"/> </validators>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> <!-- 配置驗證器,文件和action類放在一個地方,命名為action的類名+"-validaiont.xml" --> <validators> <field name="stu.name"> <!-- 對名字字段, 同時使用系統自帶的requiredstring來驗證熊為空 和自定義的驗證,來驗證不能包含敏感詞匯 --> <field-validator type="requiredstring"> <message>年齡不能為空</message> </field-validator> <field-validator type="myvalidator"> <message>姓名不能包含敏感詞匯</message> </field-validator> </field> <field name="stu.age"> <field-validator type="int"> <param name="min">12</param> <param name="max">18</param> <message>年齡只能在12到18歲之間</message> </field-validator> </field> </validators>
Struts2--驗證框架