Struct2 驗證框架

使用Struct2驗證框架實現用戶博客註冊時的輸入信息正確性校驗功能。

上代碼:

register.jsp


<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>新博客系統註冊</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link type="text/css" rel="stylesheet" href="css/main.css" media="all" />
<!--[if IE 6]><link type="text/css" rel="stylesheet" href="css/ie6.css" media="all" /><![endif]-->
<script type="text/javascript" src="js/mootools.js"></script>
<script type="text/javascript" src="js/site.js"></script>
</head>
<body>
<div id="wrapper">
  <div id="container">
    <div id="scene"> <img src="images/scene.jpg" alt="" />
      <h1>博客網站系統</h1>
      <div id="scale_area">
        <div id="scale_knob">» Font Size «</div>
      </div>
      <div id="menu">
        <div class="holder"> <a href="showAllArticle.action">博客首頁</a> </div>
        <div class="holder"> <a href="register.jsp">新博客註冊</a> </div>
        <div class="holder"> <a href="login.jsp">博客登錄</a> </div>
      </div>
    </div>
    <div id="content">
      <div id="col_left">
        <div class="post">
          <div class="meta"></div>
          <div class="comments"><div class="comment"></div>
            <h2>新博客註冊</h2>
            <form class="h" action="register.action" method="post">
              <div>
                <label>帳號:</label>
                <input type="text" name="username"/>*
                <s:fielderror><s:param>username</s:param></s:fielderror>
              </div>
              <div>
                <label>密碼:</label>
               <input type="password" name="password"/>*
               <s:fielderror><s:param>password</s:param></s:fielderror>
              </div>
			   <div>
                <label>確認密碼:</label>
                <input type="password" name="repassword"/>*
                <s:fielderror><s:param>repassword</s:param></s:fielderror>
              </div>
			   <div>
                <label>暱稱:</label>
                <input type="text" name="nickname"/>*
                <s:fielderror><s:param>nickname</s:param></s:fielderror>
              </div>
			   <div>
                <label>密碼保護問題:</label>
                <input type="text" name="question"/>*
				<s:fielderror><s:param>question</s:param></s:fielderror>
              </div>
			   <div>
                <label>密碼保護的答案:</label>
                <input type="text" name="answer"/>*
                <s:fielderror><s:param>answer</s:param></s:fielderror>
              </div>
              <div>
                <label></label>
                <div class="clear"> </div>
              </div>
              <div class="button_wrapper">
                <input name="提交" type="submit" class="button" value="註冊" />
              </div>
            </form>
          </div>
        </div>
      </div>
      <div id="col_right">
        <div id="search_box">
          <form action="" method="post">
            <div>
              <input type="text" name="search" />
            </div>
            <div class="button_wrapper">
              <input type="submit" value="Search" class="button" />
            </div>
            <div class="clear"> </div>
          </form>
        </div>
        <div id="sidebar">
          <h2>頁面導航</h2>
          <ul>
            <li><a href="showAllArticle.action">博客首頁</a></li>
            <li><a href="register.jsp">新博客註冊</a></li>
            <li><a href="login.jsp">博客登錄</a></li>
          </ul>
        </div>
      </div>
      <div class="clear"> </div>
    </div>
    <div id="footer">
      <div class="clear"> </div>
      <hr />
      <p class="credit">博客網站系統</p>
    </div>
  </div>
</div>
</body>
</html>

然後就是action類:Register.java


package com.sanqing.action;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.sanqing.po.User;
import com.sanqing.service.UserService;

public class Register extends ActionSupport{
	private String username;
	private String password;
	private String repassword;
	private String nickname;
	private String question;
	private String answer;
	private UserService userService;
	
	public UserService getUserService() {
		return userService;
	}
	public void setUserService(UserService userService) {
		this.userService = userService;
	}
	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 getRepassword() {
		return repassword;
	}
	public void setRepassword(String repassword) {
		this.repassword = repassword;
	}
	public String getNickname() {
		return nickname;
	}
	public void setNickname(String nickname) {
		this.nickname = nickname;
	}
	public String getQuestion() {
		return question;
	}
	public void setQuestion(String question) {
		this.question = question;
	}
	public String getAnswer() {
		return answer;
	}
	public void setAnswer(String answer) {
		this.answer = answer;
	}
	
	
	public String execute() throws Exception {
		//封裝一個user對象
		User user = new User();
		user.setUsername(username);
		user.setPassword(password);
		user.setNickname(nickname);
		user.setQuestion(question);
		user.setAnswer(answer);
		//獲得request
		HttpServletRequest request = ServletActionContext.getRequest();
		if(userService.registerUser(user)) {
			request.setAttribute("url", "login.jsp");
			request.setAttribute("info", "註冊成功");
			return SUCCESS;
		}else {
			request.setAttribute("url", "register.jsp");
			request.setAttribute("info", "註冊失敗");
			return ERROR;
		}
	}

}

驗證配置文件:Register-validation.xml。

需要注意的是,配置文件命名格式必須爲<ActionName> - validation.xml。並且該文件必須與Action類放於同一目錄下。


<?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>
	<validator type="requiredstring">
		<param name="fieldName">username</param>
		<param name="trim">true</param>
		<message>必須輸入用戶名</message>
	</validator>

	<validator type="regex">
		<param name="fieldName">username</param>
		<param name="expression"><![CDATA[(\w{6,20})]]></param>
		<message>用戶名長度必須爲6至20之間</message>
	</validator>

	<validator type="requiredstring">
		<param name="fieldName">password</param>
		<param name="trim">true</param>
		<message>必須輸入密碼</message>
	</validator>

	<validator type="regex">
		<param name="fieldName">password</param>
		<param name="expression"><![CDATA[(\w{6,20})]]></param>
		<message>密碼長度必須爲6至20之間</message>
	</validator>

	<validator type="requiredstring">
		<param name="fieldName">repassword</param>
		<param name="trim">true</param>
		<message>必須輸入確認密碼</message>
	</validator>

	<validator type="regex">
		<param name="fieldName">repassword</param>
		<param name="expression"><![CDATA[(\w{6,20})]]></param>
		<message>確認密碼長度必須爲6至20之間</message>
	</validator>

	<validator type="fieldexpression">
		<param name="fieldName">repassword</param>
		<param name="expression"><![CDATA[(repassword==password)]]></param>
		<message>密碼和確認密碼必須一致</message>
	</validator>

	<validator type="requiredstring">
		<param name="fieldName">nickname</param>
		<param name="trim">true</param>
		<message>必須輸入暱稱</message>
	</validator>

	<validator type="regex">
		<param name="fieldName">nickname</param>
		<param name="expression"><![CDATA[([\u4e00-\u9fa5]{2,20})]]></param>
		<message>暱稱長度必須爲2至20之間</message>
	</validator>
	
		<validator type="requiredstring">
		<param name="fieldName">answer</param>
		<param name="trim">true</param>
		<message>必須輸入密碼保護答案</message>
	</validator>

	<validator type="regex">
		<param name="fieldName">answer</param>
		<param name="expression"><![CDATA[([\u4e00-\u9fa5]{5,50})]]></param>
		<message>密碼保護答案長度必須爲5至50之間</message>
	</validator>
</validators>

       

       其實message的信息還有可以配置國際化:配置方法也極其簡單就是<message key="pass.require"></message>,key對應的是國際化配置文件中的國際化信息。


<validator type='校驗器名稱'>
     <param name='fieldName'>需要被校驗的字段</param>
      <param name="參數名">參數值</param>
      <message> 校驗錯誤信息</message>
</validator>



Struts2 的驗證規則(校驗器名稱)大概有以下數種: 
    required:必填校驗器
    requiredstring:必填字符串校驗器
    int:整數校驗器
    double:雙精度浮點數校驗器
    date:日期校驗器
    expression:表達式校驗器
    fieldexpression:字段表達式校驗器
    email:電子郵件校驗器
    url:網址校驗器
    visitor:Visitor校驗器
    conversion:轉換校驗器
    stringlength:字符串長度校驗器
    regex:正則表達式校驗器


struct.xml:

<action name="register" class="com.sanqing.action.registerAction">
	<result name="success">/success.jsp</result>
	<result name="error">/error.jsp</result>
	<result name="input">/register.jsp</result>
</action>


       驗證執行時間:驗證發生在execute方法運行之前,在Struts2的params攔截器已經把請求的參數反射的設置到Action的屬性之後,所以,驗證框架實際上驗證的是值棧裏面的內容。

       驗證的結果:如果用戶輸入的參數完全滿足驗證條件,則會繼續執行execute方法,如果用戶輸入的參數不滿足驗證條件,注意:驗證條件只要有一個驗證通不過,就會跳轉到這個Action所配置的名爲input的Result,所以在struts.xml裏最好配置一個名爲input的result


驗證框架運行流程如下圖所示:




 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章