Java轻量级MVC框架Struts2 2.5详解(5)struts2的输入校验

一、输入校验:

1.客户端校验:  过滤正常用户的误操作,通过JS代码完成(可以绕开).

2.服务端校验:  整个应用阻止非法数据的最后防线(必须),使用Java代码.

3.数据库校验:  在数据库中通过约束来限制列的存储.

二、Struts2校验方式

1.编写代码方式校验:开发中常用;

2.配置校验:

  2.1.基于XML配置校验(推荐使用)。

  2.2.基于Annotation配置校验。

三、Struts2实现校验:

    1) 要继承ActionSupport类

    2) 重写ActionSupport类中实现的Validateable接口方法validate()方法 ,在该方法中完成验证。

3)对所有方法进行校验

4)对指定的方法进行校验

5)排除某些方法不校验

在struts-default.xml文件中,在validation拦截器引用时,增加排除方法。在这里的方法,都会不进行校验。

6)跳过校验 

在不需要被校验的方法上,使用标签:@SkipValidation.

 7)更改校验失败后,跳转的结果视图

在被校验的方法上,使用@InputConfig(resultName="update")标签

四、输入校验的原理

1) validate()方法在其他的业务方法之前执行

2) 验证出错转向的页面

                         struts.xml配置结果视图<result name="input">/validate.jsp</result>  

                         其中input转向是在action中已经定义好的.

                         public static final String INPUT = "input";                 

3)什么时候表示验证出错(转向input所指向的页面)

                         *  super.addFieldError("字段名称", "错误信息");

                         *  当集合不为空时,转向错误页面.

                         *  若校验失败,不会再执行Action中的业务方法.

 

校验失败,默认跳转到input结果视图. 在workflow拦截器中,如果有错误,默认的结果视图就是input.

五、示例代码

1)ValidateAction.java

package org.openbox.validate;

import org.apache.struts2.interceptor.validation.SkipValidation;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.annotations.InputConfig;

public class ValidateAction extends ActionSupport{
	private static final long serialVersionUID = 1L;
	
	private String username;
	private String password;
	public void setUsername(String username) {
		this.username = username;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getUsername() {
		return username;
	}
	public String getPassword() {
		return password;
	}
	
	//1.对所有方法进行校验, 除此处排除的方法:<interceptor-ref name="validation">
	//<param name="excludeMethods">input,back,cancel,browse</param>
    public void validate() {
		
/*		// 此处写校验代码
		if (username==null||username.length()<6) {
			this.addFieldError("username", "用户名不能为空,不少于6位!");			
		}
		
		if (password==null||password.length()<6) {
			this.addFieldError("password", "密码不能为空,不少于6位!");			
		}
		//表单校验出错的结果视图,默认返回input,所以在struts-validate.xml中配置input结果页面
*/
	}
	
	public String input() {
		System.out.println("input方法");
		return NONE;
	}
	
    @Override
    public String execute() throws Exception {
    	System.out.println("exe校验");
    	return NONE;
    }

    //跳过校验 
    @SkipValidation
    public String list() {
    	System.out.println("list");
    	return NONE;
    }
    
    //更改失败后的结果视图
    @InputConfig(resultName="update")
    public String update() {
    	System.out.println("");
    	return NONE;
    }
    
	public String save() {
		System.out.println("save方法");
		return NONE;
	}
	
	public void validateSave() {
		if (username==null||username.length()<6) {
			this.addFieldError("username", "用户名不能为空,不少于6位!");			
		}
		
		if (password==null||password.length()<6) {
			this.addFieldError("password", "密码不能为空,不少于6位!");			
		}
	}
}

2)validate.jsp(使用struts2标签)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
    <%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>输入校验</title>
</head>
<body>
<br>
<br>
<s:form action="validate_save" method="post" theme="simple">
    账号:<s:textfield name="username" /><s:property value="fieldErrors.username[0]"/><br>
    密码:<s:textfield name="password" /><s:property value="fieldErrors.password[0]"/><br>
    <s:submit value="ok" />
</s:form>

</body>
</html>

3)struts-validate.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
	<package name="ValidatePkg" namespace="/" extends="struts-default">
		<!-- 配置ACTION -->
		<action name="validate_save" class="org.openbox.validate.ValidateAction" method="save">		
			<!-- 当输入校验出错时,跳转的结果视图 -->   
			<result name="input">/validate.jsp</result>
			<allowed-methods>input,save,execute,list,update</allowed-methods>
		</action>
	</package>
</struts>

猜你喜欢

转载自blog.csdn.net/openbox2008/article/details/87877453