struts2验证之编码式验证


编码式验证:

1.Validate(),Action类下所有方法都会执行验证

在struts2框架下,继承于ActionSupport类的Action类下,重写Validate(),实现验证过程:

package yzr.ValidateByCode;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
	private String username;
	private String password;
	
	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;
	}

	@Override
	public String execute() throws Exception {
		return SUCCESS;
	}
	/*
	   所有进入此Action的请求都会进入validate()验证方法 
	 */
	@Override
	public void validate() {
		if("".equals(username)){
			this.addFieldError("username", "用户名不能为空");
		}
		if("".equals(password)){
			this.addFieldError("password", "密码不能为空");
		}
	}
}


struts.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
 <struts>
    <package name="login" extends="struts-default" namespace="/">
        <action name="loginRequest"  
                class="yzr.ValidateByCode.LoginAction"   
                method="execute"  >
            <result name="success" type="dispatcher">
                /login/LoginResult.jsp
            </result>
            <result name="input" type="dispatcher">
            	/login/login.jsp
            </result>
        </action>
    </package>
 </struts>
login.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>登陆</title>
  </head>
  <body>
  <s:fielderror />
       <form id="loginForm" action="${ pageContext.request.contextPath}/loginRequest" method="POST">
       		<table>
       			<tr>
       				<td>Name:</td>
       				<td><input type="text" id="username" name="username" /></td>
       			</tr>
       			<tr>
       				<td>PassWord:</td>
       				<td><input type="text" id="password" name="password" /></td>
       			</tr>
       			<tr>
       				<td></td>
       				<td><input type="submit" value="Login"/></td>
       			</tr>
       		</table>
       </form>
  </body>
</html>


若重写Validate方法之后,由于每次请求都会走此验证过程,这在某些场景是不合适的,只有在执行每个业务方法之前都要进行验证操作才写在Validate()中,而对于具体的每一个业务方法应该有自己的验证方法:
2.同一个Action类下每一个业务方法自己的验证逻辑:
修改一下LoginAction:
/*
	       所有进入此Action的请求都会进入validate()验证方法 
	 */
	@Override
	public void validate() {
		/*
		if("".equals(username)){
			this.addFieldError("username", "用户名不能为空");
		}
		if("".equals(password)){
			this.addFieldError("password", "密码不能为空");
		}
		*/
	}
	
	public String loginMethod() throws Exception{
		return "success";
	}
	public void validateLoginMethod(){
		if("".equals(username)){
			this.addFieldError("username", "用户名不能为空");
		}
		if("".equals(password)){
			this.addFieldError("password", "密码不能为空");
		}
	}

struts.xml相应修改一个Method:
<action name="loginRequest"  
                class="yzr.ValidateByCode.LoginAction"   
                method="loginMethod"  >
            <result name="success" type="dispatcher">
                /login/LoginResult.jsp
            </result>
            <result name="input" type="dispatcher">
            	/login/login.jsp
            </result>
      </action>

当一个Action中,同时出现validate()和validateRegisterMethod()方法时,两者都会被执行验证,而且执行顺序是:

先具体的业务方法的验证(validateXXX),再执行validate()验证方法。

假如想取消验证,把相应的validateXXX()方法删除掉即可。

以上内容绿色字体表示容易遗漏,红色字体表示重点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值