编码式验证:
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()验证方法。