使用struts2框架進行輸入校驗,主要步驟:
①準備實體類
package com.struts2.validate.entities;
public class User
{
private String name;
private Integer age;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public Integer getAge()
{
return age;
}
public void setAge(Integer age)
{
this.age = age;
}
@Override
public String toString()
{
return "User [name=" + name + ", age=" + age + "]";
}
}
②準備提交表單
<%@ 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>
<script type="text/javascript" src="script/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function(){
$("input").change(function(){
alert($(this).val());
var url = "user-ajaxvalidate";
var args = {"loginName":"loginName","time":new Date()};
$.post(url,args,function(data){
if(data == "true"){
alert("ajaxValidate Succcess");
}else{
alert("ajaxValidate Fail")
}
})
return false;
})
})
</script>
</head>
<body>
<s:debug></s:debug>
<center>
<form action="user-login" method="post">
用戶名:<input type="text" name="name" value="${name }">${fieldErrors.name[0] }<br><br>
年齡:<input type="text" name="age" value="${age }">${fieldErrors.age[0] }<br><br>
<input type="submit" value="Submit">
</form>
</center>
</body>
</html>
③準備請求action
package com.struts2.validate.action;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
import com.struts2.validate.entities.User;
public class UserAction extends ActionSupport implements ModelDriven<User>,Preparable
{
/**
*
*/
private static final long serialVersionUID = 1L;
private User user;
private String loginName;
private InputStream inputStream;
public InputStream getInputStream()
{
return inputStream;
}
public void setLoginName(String loginName)
{
this.loginName = loginName;
}
public String ajaxvalidate()
{
System.out.println(loginName);
try
{
inputStream = new ByteArrayInputStream("true".getBytes("UTF-8"));
} catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
return "ajax";
}
//表單請求方法
public String login()
{
System.out.println(user);
return SUCCESS;
}
public void prepareLogin()
{
user = new User();
}
@Override
public void prepare() throws Exception
{
}
@Override
public User getModel()
{
return user;
}
}
④在表單所請求的action同一個包下以以下其中一種方式創建基於xml的校驗文件:
a.請求的actionName-validation.xml ----該方式將會對action內的所有請求方法按校驗文件內配置的字段進行校驗(相當於全局字段校驗),無論其他請求的方法中是否有配置文件內配置的字段,如果請求參數中沒有配置文件內要校驗的字段,將會直接轉發回表單頁面(action類繼承了ActionSuport並且在struts.xml中進行result="input"的配置)
b.請求的actionName-請求方法名-validation.xml ----該方式將會對提交到請求方法中的字段按照校驗文件的配置進行校驗,屬於局部校驗
配置UserAction-user-login-validation.xml校驗文件(注意:在同一個action中含有處理ajax請求的方法,所以這裏的校文件必須使用局部校驗的配置方式(如果也對ajax提交的數據進行校驗則使用全局方式,一般不推薦對ajax提交的數據使用Struts2的校驗框架進行校驗具體原因請參考其他文檔)
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.2//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<!-- -->
<field name="name">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用戶名不能爲空</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">3</param>
<param name="maxLength">20</param>
<param name="trim">true</param>
<message>用戶名長度必須在3~20之間</message>
</field-validator>
</field>
<field name="age">
<field-validator type="required" short-circuit="true">
<param name="trim">true</param>
<message>用戶年齡不能爲空</message>
</field-validator>
<field-validator type="int">
<param name="min">3</param>
<param name="max">20</param>
<message>用戶年齡必須在3~20之間</message>
</field-validator>
</field>
</validators>
⑤配置strut.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="default" extends="struts-default">
<interceptors>
<interceptor-stack name="MyStack">
<interceptor-ref name="paramsPrepareParamsStack">
<param name="prepare.alwaysInvokePrepare">false</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="MyStack"></default-interceptor-ref>
<action name="user-*" class="com.struts2.validate.action.UserAction" method="{1}">
<result name="input">/input.jsp</result>
<result name="success">/success.jsp</result>
<result type="stream" name="ajax">
<param name="contentType">text/html</param>
<param name="inputName">inputStream</param>
</result>
</action>
</package>
</struts>
總結:該博文主要是:Struts2校驗文件是針對請求方法僥倖配置而不是針對字段所以配置校驗文件時一般都是配置爲局部校驗,對於公共字段則使用全局校驗的配置。