struts2中利用validation框架進行數據校驗


1,創建web工程 java EE5,在lib中導入struts2的各個包(參見前面的“sturts2配置”)形成的具體工程結構圖如下:

2,創建用戶注冊模塊的視圖界面register.jsp  registerSuccess.jsp

  register.jsp的代碼如下:

View Code
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="struts" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'register.jsp' starting page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
        <struts:text name="register.jsp.label.heading"/>
        <struts:fielderror/>
        <hr/>
        <center>
            <struts:form action="register" method="post">
                <struts:textfield name="userName" key="register.jsp.label.username"></struts:textfield>
                <struts:password name="psw1" key="register.jsp.label.psw1"></struts:password>
                <struts:password name="psw2" key="register.jsp.label.psw2"></struts:password>
                <struts:textfield name="telNum" key="register.jsp.label.age"></struts:textfield>
                <struts:textfield name="email" key="register.jsp.label.telnum"></struts:textfield>
                <struts:submit key="register.jsp.button.submit"></struts:submit>
            </struts:form>
        </center>
  </body>
</html>

  registerSuccess.jsp的代碼如下:

View Code
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="struts" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'registerSuccess.jsp' starting page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
    <center><struts:text name="registerSuccess.jsp.heading"></struts:text></center>
    <hr/>
    <struts:text name="registerSuccess.jsp.label.welcome"/>
    <struts:property value="userName"/>
    <struts:fielderror/>
  </body>
</html>

3,在src下創建資源信息文件Application.properties  並創建struts.properties配置文件

  Application.properties的內容如下:

View Code
register.jsp.label.title=Register Page
register.jsp.label.heading=<center><h2>User Register</h2></center>
register.jsp.label.username=User Name*
register.jsp.label.psw1=Password*
register.jsp.label.psw2=Validation Password*
register.jsp.label.age=Age
register.jsp.label.email=E_Mail*
register.jsp.label.telnum=Telephone Number
register.jsp.button.submit=Submit
register.jsp.button.reset=Reset
registerSuccess.jsp.title=Welcome Page
registerSuccess.jsp.heading=<center><h2>Welcome to Our System</h2></center>
registerSuccess.jsp.label.welcome=Welcome
username.required=Please input your user name.
username.maxlength=The length of your user name shouldn't exceed 20 characters.
psw.required=Please input your password.
psw.maxlength=The length of your password shouldn't exceed 20 characters.
errors.validwhen=password isn't equal to validation password.
sex.required=Please input your sex.
age.error=Your age must be in this interval(0,200).
tel.error=Please input correct telephone number(7-15 figures).
email.required=Please input your E_Mail.
email.error=E_Mail illegal.
username.exist=This user name exists.

  讓struts2框架識別資源配置文件的代碼為“struts.custom.i18n.resources=Application",  struts.properties的代碼如下:

View Code
struts.action.extension=action
struts.custom.i18n.resources=Application
struts.locale=en_GB

4,創建Action:action.RegisterAction.java,  代碼如下:

View Code

  在RegisterAction類所在路徑下創建名為RegisterAction-validation.xml的配置文件,該配置文件的命名規則是:<ActionClassName>-validation.xml,該文件的存放路徑要和RegisterAction類在同一路徑下,即放在action包中,,具體代碼如下:

View Code
<?xml version="1.0" encoding="UTF-8" ?>
  <!DOCTYPE validators PUBLIC 
          "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
          "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>

    <!-- 檢查用戶名是否為空,長度是否越界 -->    
    <field name="userName">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>${getText("username.required")}</message>
        </field-validator>
        <field-validator type="stringlength">
            <param name="minLength">0</param>
            <param name="maxLength">20</param>
            <message>${getText("username.maxlength")}</message>
        </field-validator>
    </field>
    
    <!-- 檢查密碼是否為空,輸入的兩個密碼是否一致 -->
    <field name="psw1">
        <field-validator type="requiredstring">
            <message>${getText("psw.required")}</message>
        </field-validator>
        <field-validator type="fieldexpression">
            <param name="expression"><![CDATA[(psw2==psw1)and(psw1!=null)]]></param>
            <message>${getText("errors.validwhen")}</message>
        </field-validator>
    </field>
    
    <!-- 檢查年齡,年齡在0-200之間 -->
    <field name="age">
        <field-validator type="int">
            <param name="min">0</param>
            <param name="max">200</param>
            <message>${getText("age.error")}</message>
        </field-validator>
    </field>
    
    <!-- 檢查電話號碼,判斷是否為0-9之間的7-15位數字 -->
    <field name="telNum">
        <field-validator type="regex">
            <param name="expression"><![CDATA[[0-9]{7,15}$]]></param>
            <message>${getText("tel.error")}</message>
        </field-validator>
    </field>
    
    <!-- 檢查電子郵箱是否合法 -->
    <field name="email">
        <field-validator type="requiredstring">
            <message>${getText("email.required")}</message>
        </field-validator>
        <field-validator type="email">
            <message>${getText("email.error")}</message>
        </field-validator>
    </field>
</validators>

  然后將Struts2的JAR包中的xwork-validation-1.0.2.dtd文件放到和數據校驗配置文件同路徑下,即放到包action中。

5,為解決中文亂碼問題,創建過濾器filter.CharacterEncodingFilter.java

View Code
package filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class CharacterEncodingFilter implements Filter {
    private String characterEncoding;//編碼方式在web.xml中
    private boolean enabled;//是否啟動filter,初始值在web.xml中
    
    @Override
    public void init(FilterConfig config) throws ServletException {
        // TODO Auto-generated method stub
        //初始化時加載參數
        //從配置文件中讀取設置到編碼方式
        characterEncoding=config.getInitParameter("characterEncoding");
        //啟動該過濾器完成編碼方式到修改
        enabled="true".equalsIgnoreCase(characterEncoding.trim())
            ||"1".equalsIgnoreCase(characterEncoding.trim());
        
    }
    
    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        if(enabled||characterEncoding!=null){
            request.setCharacterEncoding(characterEncoding);//設置request編碼方式
            response.setCharacterEncoding(characterEncoding);//設置response編碼方式
        }
        chain.doFilter(request, response);//doFilter將修改好的request和response參數向下傳遞;
        
    }

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        characterEncoding=null;
        
    }
}

6, 配置web.xml

View Code
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>register.jsp</welcome-file>
  </welcome-file-list>
  
   <filter>
      <filter-name>struts</filter-name>
      <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
      <init-param>
          <param-name>struts.action.extension</param-name>
          <param-value>action</param-value>
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>struts</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <filter>
      <filter-name>characterEncodingFilter</filter-name>
      <filter-class>filter.CharacterEncodingFilter</filter-class>
      <init-param>
          <param-name>characterEncoding</param-name>
          <param-value>UTF-8</param-value>
      </init-param>
      <init-param>
          <param-name>enable</param-name>
          <param-value>true</param-value>
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>characterEncodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

7,配置struts.xml  (注意配置input)

View Code
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC 
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <package name="main" extends="struts-default">
        <action name="register" class="action.RegisterAction">
            <result name="input">/register.jsp</result>
            <result>/registerSuccess.jsp</result>
        </action></package>
</struts>
<!-- 這里 struts中必須配置input返回視圖,否則會報錯,
    官方的解釋是:if you don't have this,you'll get a:"No result defined for action xxx.xxx.xxx 
    and result input"error
 -->

8,發布即可。。。

參考資料:

(1)Struts2中的校驗框架 :http://blog.csdn.net/jadyer/article/details/6176122

(2)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM