struts2手工检验,想要实现校验,action必须继承自ActionSupport类,如下为简单登录注册校验。
login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML>
<html>
<head>
<title>login</title>
<meta charset="utf-8">
</head>
<body>
<form action="login" methor="get">
<input type="hidden" name="user.type" value="login"/>
<p>
<input type="text" name="user.name" placeholder="用户名"/>
<s:fielderror><s:param>name</s:param></s:fielderror>
</p>
<p>
<input type="password" name="user.pass" placeholder="密码"/>
<s:fielderror><s:param>pass</s:param></s:fielderror>
</p>
<p>
<input type="submit" value="submit"/>
</p>
</form>
<a href="reg.jsp">reg.jsp</a>
</body>
</html>
reg.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>reg</title>
<meta charset="utf-8">
</head>
<body>
<form action="reg" method="get">
<input type="hidden" name="user.type" value="reg"/>
<p>
<input type="text" name="user.name" placeholder="用户名"/>
<s:fielderror><s:param>name</s:param></s:fielderror>
</p>
<p>
<input type="password" name="user.pass" placeholder="密码"/>
<s:fielderror><s:param>pass</s:param></s:fielderror>
</p>
<p>
<input type="text" name="user.age" placeholder="年龄"/>
<s:fielderror><s:param>age</s:param></s:fielderror>
</p>
<p>
<input type="text" name="user.birth" placeholder="出生日期"/>
<s:fielderror><s:param>birth</s:param></s:fielderror>
</p>
<p>
<input type="submit" value="submit"/>
</p>
</form>
</body>
</html>
result.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>RegAndLogin_result</title>
<meta charset="utf-8">
</head>
<body>
<%
String form_action = request.getParameter("user.type");
if(form_action=="login"||form_action.equals("login")){
%>
<p>用户:<s:property value="user.name"/></p>
<p>密码:<s:property value="user.pass"/></p>
<%
}else if(form_action=="reg"||form_action.equals("reg")){
%>
<p>用户:<s:property value="user.name"/></p>
<p>密码:<s:property value="user.pass"/></p>
<p>年龄:<s:property value="user.age"/></p>
<p>出生日期:<s:property value="user.birth"/></p>
<%
}else{
out.print("hello world");
out.print(form_action);
}
%>
</body>
</html>
User.java
package top.k10000;
import java.util.Date;
public class User {
private String name;
private String pass;
private String age;
private Date birth;
private String type;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public void setName(String str_name){
this.name = str_name;
}
public String getName(){
return name;
}
public void setPass(String str_pass) {
this.pass = str_pass;
}
public String getPass() {
return pass;
}
public void setAge(String str_age) {
this.age = str_age;
}
public String getAge() {
return age;
}
public void setBirth(Date str_birth) {
this.birth = str_birth;
}
public Date getBirth() {
return birth;
}
}
RegAndLoginAction.java
package top.k10000;
import java.util.regex.Pattern;
import com.opensymphony.xwork2.ActionSupport;
public class RegAndLoginAction extends ActionSupport {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
// 注册
public void validateReg(){
if(user.getName()==null||user.getName().equals("")){
this.addFieldError("name","用户名不能为空");
}
else if(!Pattern.matches("^[a-zA-Z][a-zA-Z0-9_]{3,14}$", user.getName())){
this.addFieldError("name","用户名必须字母开头,3-14位,由数字字母下划线组合");
}
else if(user.getPass()==null||user.getPass().equals("")){
this.addFieldError("pass","密码不能为空");
}
else if(!Pattern.matches("^[a-zA-Z][a-zA-Z0-9_]{3,14}$", user.getPass())){
this.addFieldError("pass","密码3-14位,字母,下划线");
}
else if(user.getAge()==null||user.getAge().equals("")){
this.addFieldError("age","年龄不能为空");
}
else if(!Pattern.matches("^(?:[1-9][0-9]?|1[01][0-9]|120)$", user.getAge())){
this.addFieldError("age","年龄必须在1-120岁之内");
}
else if(user.getBirth()==null||user.getBirth().equals("")){
this.addFieldError("birth","出生日期不能为空");
}
else if(Pattern.matches("^\\d{4}-([1-9]|1[0-2])-([1-9]|[1-2][0-9]|3[0-1])$", user.getAge())){
this.addFieldError("birth","格式错误,需为yyyy-MM-dd");
}
}
public String reg() throws Exception {
if(this.hasFieldErrors()){
return INPUT;
}else{
System.out.println("reg ok!!!");
return SUCCESS;
}
}
// 登录
public void validateLogin(){
if(user.getName()==null||user.getName().equals("")){
this.addFieldError("name","用户名不能为空");
}
else if(!Pattern.matches("^[a-zA-Z][a-zA-Z0-9_]{3,14}$", user.getName())){
this.addFieldError("name","用户名必须字母开头,3-14位,由数字字母下划线组合");
}
else if(user.getPass()==null||user.getPass().equals("")){
this.addFieldError("pass","密码不能为空");
}
else if(!Pattern.matches("^[a-zA-Z][a-zA-Z0-9_]{3,14}$", user.getPass())){
this.addFieldError("pass","密码3-14位,字母,下划线");
}
}
public String login() throws Exception {
if(this.hasFieldErrors()){
return INPUT;
}else{
System.out.println("login ok!!!");
return SUCCESS;
}
}
}
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="reg_package" extends="struts-default">
<action name="login" class="top.k10000.RegAndLoginAction" method="login">
<result name="success">/result.jsp</result>
<result name="input">/login.jsp</result>
</action>
<action name="reg" class="top.k10000.RegAndLoginAction" method="reg">
<result name="success">/result.jsp</result>
<result name="input">/reg.jsp</result>
</action>
</package>
</struts>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>