基于struts2的校验示例

页面login.jsp

<%@ page language="java"  pageEncoding="UTF-8" contentType="text/html; charset=utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
  <head>    
    <title>My JSP 'login.jsp' starting page</title>
  </head>
  <body>
  <br>
      <s:fielderror/>
      <s:form name="loginForm" method="post"  namespace="/validate"  action="validateAction_login.action" theme="simple" >
         <table border="1">
           <tr>
              <td>用户名</td>
              <td> <s:textfield name="username" /></td>
           </tr>
           <tr>
              <td>密码</td>
              <td><s:password name="psw" /></td>
           </tr>
           <tr>
              <td> </td>
              <td><s:submit value="登陆"/></td>
           </tr>
         </table>
     </s:form>
  </body>
  
  <a href="${pageContext.request.contextPath}/validate/validateAction_test.action">test其他的方法</a>
  
</html>

非xml文件方式配置:

创建action类通过此示例要校验用户名和密码

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class ValidateAction extends ActionSupport {

	private String username;
	
	private String psw;
	
	public void setUsername(String username) {
		System.out.println("ValidateAction ************ setUsername()");
		this.username = username;
	}
	
	/*
	 * 验证方法:
	 * 	* 该动作类action必须继承ActionSupport或者实现Validateable接口
	 * 	* 必须重写Validateable接口提供的validate()方法
	 * 
	 * 	* 必须要保证setUsername()、validate()、login()方法的执行顺序如下:
	 * 		* setUsername()
	 * 		* validate()
	 * 		* login()
	 * 
	 *  * 如果登录失败,如何处理:
	 *  	* this.addFieldError( key, value);
	 *  		* key:错误提示字段
	 *  		* value:错误提示信息
	 * 
	 *  * 通过底层代码说明:
	 *  	public synchronized void addFieldError(String fieldName, String errorMessage) {
		        final Map<String, List<String>> errors = internalGetFieldErrors();		//声明一个map集合
		        List<String> thisFieldErrors = errors.get(fieldName);					//声明一个list集合,放入对应错误提示信息
		
		        if (thisFieldErrors == null) {											//如果list集合为空
		            thisFieldErrors = new ArrayList<String>();							//重新创建一个list集合
		            errors.put(fieldName, thisFieldErrors);								//把list集合放入到map集合中
		        }
		
		        thisFieldErrors.add(errorMessage);										//把错误提示信息放入到list集合中
		    }
	 * 
	 * 	* 什么时候才是验证通过?
	 * 		* 验证通过:1、map集合不存在;2、map集合存在并为空
	 * 		* 验证不通过:map集合存在并且不为空
	 * 
	 * 	* 分析需求:
	 * 		* 用户名不能为null ,""
	 		* 密码不能为null, "" ,并且密码的长度6-12之间 
	 * 
	 * 	* 针对所有业务方法进行验证还是针对某个指定业务方法进行验证?
	 * 		* 重写的validate()方法,针对所有业务方法进行验证
	 * 		* 重写的validate()方法加上要验证的指定的业务方法名(业务方法名的首字母大写),实现针对某个指定的业务方法进行验证
	 * 		 如该方法只想校验login方法 则这样写方法名validateLogin();
         *              为什么要这样进行拼接?因为struts2框架底层拼接,如果不这样写,底层就找不到对应方法名
	 * 	
	 */
             public void validate() {
		System.out.println("ValidateAction ************ validate()");
		
		if(username==null||username.equals("")){
			this.addFieldError("error", "用户名不能为空!");
		}
		
		if(psw==null||psw.equals("")){
			this.addFieldError("error", "密码不能为空!");
		}else{
			
			String pattern = "^[0-9a-zA-Z]{6,12}$";
			
			Pattern p = Pattern.compile(pattern);
			
			Matcher m = p.matcher(psw);
			
			boolean b = m.matches();
			
			if(!b){
				this.addFieldError("error", "密码的长度必须在6至12之间!");
			}
			
		}
		
	}
	
	public String login(){
		System.out.println("ValidateAction ********* login()");
		
		System.out.println("username = "+username);
		
		System.out.println("password = "+psw);
		
		return "success";
	}
	
	public String test(){
		System.out.println("ValidateAction ********* test()");
		return "success";
	}

	public String getUsername() {
		return username;
	}

	public String getPsw() {
		return psw;
	}

	public void setPsw(String psw) {
		this.psw = psw;
	}
	
}

基于xml文件配置的校验:

  loginxml.jsp页面

<%@ page language="java"  pageEncoding="UTF-8" contentType="text/html; charset=utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
  <head>    
    <title>My JSP 'login.jsp' starting page</title>
  </head>
  <body>xml页面
  <br>
      <s:fielderror/>
      <s:form name="loginForm" method="post" namespace="/validate"  
              action="validateXmlAction_login.action" theme="simple" >
         <table border="1">
           <tr>
              <td>用户名</td>
              <td> <s:textfield name="username" /></td>
           </tr>
           <tr>
              <td>密码</td>
              <td><s:password name="psw" /></td>
           </tr>
            <tr>
              <td>年龄(不能小于0)</td>
              <td> <s:textfield name="age" /></td>
           </tr>
           <tr>
              <td> </td>
              <td><s:submit value="登陆"/></td>
           </tr>
         </table>
     </s:form>
     
     <a href="${pageContext.request.contextPath}/validate/validateXmlAction_test.action">test其他的方法</a>
  </body>
  
</html>

在action类的同一目录下创建对应的xml文件

 命名方式:ActionClassName-validation.xml,ActionClassName指的是动作类action的名称此命名方法针对该类中所有方法

若想只针对该类中的某一个方法,则使用ActionClassName-ActionName-validation.xml。需要指出的是此处的ActionName为struts.xml中定义的action中的name值


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
  		"-//Apache Struts//XWork Validator 1.0.3//EN"
  		"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
	<!-- 
		field:指定action中要校验的属性
			* name:指定将被验证的表单字段的名字
	 -->
	<field name="username">
		<!-- 
			field-validator:指定验证规则
				* type:指定验证规则的名称
		 -->
		<field-validator type="requiredstring">
			<!-- 
				param:向验证器传递的参数
					* requiredstring验证器的参数是"trim",设置为"true"的作用是去空格
			 -->
			<param name="trim">true</param>
			<!-- 
				message:验证失败时,提示的错误信息
					* <![CDATA[]]>:保证按原文输出
					* 里面的文本:错误提示信息
			 -->
			<message><![CDATA[用户名不能为空!]]></message>
		</field-validator>
	</field>
	<field name="psw">
		<field-validator type="requiredstring">
			<param name="trim">true</param>
			<message><![CDATA[密码不能为空!]]></message>
		</field-validator>
		<!-- 使用正则表达式验证规则来做"regex" -->
		<field-validator type="regex">
			<param name="trim">true</param>
			<param name="expression"><![CDATA[^[0-9a-zA-Z]{6,12}$]]></param>
			<message><![CDATA[密码的长度必须在6至12之间!]]></message>
		</field-validator>
	</field>
</validators>

其中的type属性可选值为
<field-validator type="requiredstring">



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值