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


验证框架运行流程如下图所示:




 

猜你喜欢

转载自blog.csdn.net/xia236326/article/details/74309200