Struts2基于的XML配置方式的输入校验

1. 回顾上节课的知识

请你描述下在服务端的Action组件中如何处理输入验证?

  • 继承ActionSupport类,重写validate()
  • 不合法的情况交给validate
  • 合法的情况交给execute

编写ValidateLoginAction

package cn.zhengbin.action;

import org.apache.commons.lang3.StringUtils;

import com.opensymphony.xwork2.ActionSupport;

public class ValidateLoginAction extends ActionSupport {
     
	
	private String account;
	private String password;
	
	
	@Override
	public String execute() throws Exception {
     
		return SUCCESS;
	}
	
	@Override
	public void validate() {
     
		if(account.length() < 6) {
     
			addFieldError("account", "用户名长度不能小于六位");
		}
		if(password.length() < 6) {
     
			addFieldError("password", "用户密码长度不能小于六位");
		}
		if(account.contains(" ")) {
     
			addFieldError("account", "用户名中不能出现空格");
		}
		if(password.contains(" ")) {
     
			addFieldError("password", "密码中不能出现空格");
		}
		if(StringUtils.isEmpty(account)) {
     
			addFieldError("account", "请输入用户名");
		}
		if(StringUtils.isEmpty(password)) {
     
			addFieldError("password", "请输入密码");
		}
	}

	public String getAccount() {
     
		return account;
	}

	public void setAccount(String account) {
     
		this.account = account;
	}

	public String getPassword() {
     
		return password;
	}

	public void setPassword(String password) {
     
		this.password = password;
	}

}

1.2编写login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@taglib  prefix="s" uri="/struts-tags"%>


      
    用户登陆
    
  
  
  
      

2.基于的XML配置方式的输入校验

2.1Struts2常用内置校验器

内置校验器类型 说明
required 不允许为空。用于非字符串类型
requiredstring 不允许为空。仅用于非字符串类型
int 必须是合法的int类型
long 必须是合法的long类型
double 必须是合法的double类型
date 必须是合法的日期类型
email 必须是合法的email类型
url 必须是合法的url类型
stringlength 判断字符串的长度是否合法
regex 使用正则表达式进行校验

2.2 案例:使用XML的方式校验用户登录

任务实现步骤

  • 编写Action类
  • 配置struts.xml
  • 编写login.jsp
  • 编写Action-actionName-validation.xml

技巧1:关于校验配置xml文件的两点注意事项

  • 校验配置xml文件要与被校验的Action在同一个包中。
  • 校验配置文件的名称应该为:被校验的Action类名-struts.xml文件中的action的name属性值-validation.xml
  • 注意:“-validation.xml”部分是固定不变的

2.2.1 编写Action类

package cn.zhengbin.action;

import com.opensymphony.xwork2.ActionSupport;

public class ValidateLoginAction extends ActionSupport {
     
	
	private String account;
	private String password;
	
	
	@Override
	public String execute() throws Exception {
     
		return SUCCESS;
	}
	
//	@Override
//	public void validate() {
     
//		if(account.length() < 6) {
     
//			addFieldError("account", "用户名长度不能小于六位");
//		}
//		if(password.length() < 6) {
     
//			addFieldError("password", "用户密码长度不能小于六位");
//		}
//		if(account.contains(" ")) {
     
//			addFieldError("account", "用户名中不能出现空格");
//		}
//		if(password.contains(" ")) {
     
//			addFieldError("password", "密码中不能出现空格");
//		}
//		if(StringUtils.isEmpty(account)) {
     
//			addFieldError("account", "请输入用户名");
//		}
//		if(StringUtils.isEmpty(password)) {
     
//			addFieldError("password", "请输入密码");
//		}
//	}

	public String getAccount() {
     
		return account;
	}

	public void setAccount(String account) {
     
		this.account = account;
	}

	public String getPassword() {
     
		return password;
	}

	public void setPassword(String password) {
     
		this.password = password;
	}
}

2.2.2 配置struts.xml



<struts>
	
	<constant name="struts.enable.DynamicMethodInvocation" value="true" />

	<package name="login" namespace="/" extends="struts-default">
		<action name="fieldValidate_login" class="cn.zhengbin.action.ValidateLoginAction">
			<result name="input">/login.jspresult>
			<result name="success">/main.jspresult>
		action>
	package>
struts>   

2.2.3 编写login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@taglib  prefix="s" uri="/struts-tags"%>


      
    用户登陆
    
  
  
  
      

2.2.4 编写ValidateLoginAction-fieldValidate_login-validate.xml




  		<validators>
  			<field name="account">
  				<field-validator type="requiredstring">
  					<message>账号不能为空message>
  				field-validator>
  				<field-validator type="stringlength">
  					<param name="minLength">6param>
  					<param name="maxLength">12param>
  					<message>账号长度必须在${minLength}至${maxLength}之间message>
  				field-validator>
  				<field-validator type="regex">
  					<param name="regexExpression">
  						
  					param>
  					<message>账号不能包含空格message>
  				field-validator>
  			field>
  			
  			<field name="password">
  				<field-validator type="requiredstring">
  					<message>密码不能为空message>
  				field-validator>
  				
  				<field-validator type="stringlength">
  					<param name="minLength">6param>
  					<param name="maxLength">12param>
  					<message>密码长度必须在${minLength}至${maxLength}之间message>
  				field-validator>
  				<field-validator type="regex">
  					<param name="regexExpression">
  						
  					param>
  					<message>账号不能包含空格message>
  				field-validator>
  			field>
  		validators>

3. 小结

  • struts2提供了两种方式的输入校验,一种基于手动的输入校验。一种是基于配置方式的输入校验
  • 如果需要对Action类中的execute()方法进行输入定义,需要定义validate()方法
  • 如果需要对Action类红的Xxx()方法进行输入定义,需要定义validateXxx()方法
  • 对于校验配置文,需要注意以下几点
    • 被校验的Action要与该Action的校验配置文件在同一个包下
    • 配置校验文件的名称应该为Action类名-struts.xml文件中的action的name属性值-validation.xml。后面高亮的内容是固定不变的

你可能感兴趣的:(笔记,java,struts2)