<?xml version="1.0" encoding="GBK"?> <project name="struts" basedir="." default=""> <property name="dist" value="classes"/> <property name="src" value="src"/> <path id="classpath"> <fileset dir="lib"> <include name="*.jar"/> </fileset> <pathelement path="${dist}"/> </path> <target name="compile" description="Compile all source code"> <delete dir="${dist}"/> <mkdir dir="${dist}"/> <copy todir="${dist}"> <fileset dir="${src}"> <exclude name="**/*.java"/> </fileset> </copy> <javac destdir="classes" debug="true" includeantruntime="yes" deprecation="false" optimize="false" failonerror="true"> <src path="${src}"/> <classpath refid="classpath"/> </javac> </target> </project>
<?xml version="1.0" encoding="GBK"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <!-- 定义Struts 2的核心Filter --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <!-- 让Struts 2的核心Filter拦截所有请求 --> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
<%-- 网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> author yeeku.H.lee kongyeeku@163.com version 1.0 Copyright (C), 2001-2016, yeeku.H.Lee This program is protected by copyright laws. Program Name: Date: --%> <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>请输入您的注册信息</title> <s:head/> </head> <body> <h2>请输入您的注册信息</h2> <s:fielderror/> <s:form action="regist"> <s:textfield name="name" label="用户名"/> <s:textfield name="pass" label="密码"/> <s:textfield name="age" label="年龄"/> <s:textfield name="birth" label="生日"/> <s:submit value="注册"/> </s:form> </body> </html>
<%-- 网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> author yeeku.H.lee kongyeeku@163.com version 1.0 Copyright (C), 2001-2016, yeeku.H.Lee This program is protected by copyright laws. Program Name: Date: --%> <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>校验成功</title> </head> <body> <h3>校验成功</h3> 用户名:<s:property value="name"/><br/> 密码:<s:property value="pass"/><br/> 年龄:<s:property value="age"/><br/> 生日:<s:property value="birth"/><br/> </body> </html>
<?xml version="1.0" encoding="GBK"?> <!-- 指定Struts 2配置文件的DTD信息 --> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- 指定该应用编码的字符集 --> <constant name="struts.i18n.encoding" value="GBK"/> <package name="lee" extends="struts-default"> <!-- 定义处理用户请求的regist Action,使用RegistAction的 regist方法处理用户请求 --> <action name="regist" class="org.crazyit.app.action.RegistAction" method="regist"> <result name="input">/WEB-INF/content/registForm.jsp</result> <result>/WEB-INF/content/show.jsp</result> </action> <action name="*"> <result>/WEB-INF/content/{1}.jsp</result> </action> </package> </struts>
package org.crazyit.app.action; import com.opensymphony.xwork2.ActionSupport; import java.util.*; /** * Description: * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee * <br/>This program is protected by copyright laws. * <br/>Program Name: * <br/>Date: * @author Yeeku.H.Lee kongyeeku@163.com * @version 1.0 */ public class RegistAction extends ActionSupport { private String name; private String pass; private int age; private Date birth; // name的setter和getter方法 public void setName(String name) { this.name = name; } public String getName() { return this.name; } // pass的setter和getter方法 public void setPass(String pass) { this.pass = pass; } public String getPass() { return this.pass; } // age的setter和getter方法 public void setAge(int age) { this.age = age; } public int getAge() { return this.age; } // birth的setter和getter方法 public void setBirth(Date birth) { this.birth = birth; } public Date getBirth() { return this.birth; } public String regist() { return SUCCESS; } public void validate() { System.out.println("进入validate()方法进行校验" + name); // 要求用户名必须包含crazyit子串 if(!name.contains("crazyit")) { addFieldError("user" , "您的用户名必须包含crazyit!"); } } public void validateRegist() { System.out.println("进入validateRegist()方法进行校验" + name); // 要求用户名必须包含.org子串 if(!name.contains(".org")) { addFieldError("user" , "您的用户名必须包含.org!"); } } }
xwork.default.invalid.fieldvalue={0}字段无效 name.requried=您必须输入用户名! name.regex=您输入的用户名只能是字母和数组,且长度必须在4到25之间! pass.requried=您必须输入密码! pass.regex=您输入的密码只能是字母和数组,且长度必须在4到25之间! age.range=您的年龄必须在${min}和${max}之间! birth.range=您的生日必须在${min}和${max}之间!
xwork.default.invalid.fieldvalue={0}\u5b57\u6bb5\u65e0\u6548 name.requried=\u60a8\u5fc5\u987b\u8f93\u5165\u7528\u6237\u540d! name.regex=\u60a8\u8f93\u5165\u7684\u7528\u6237\u540d\u53ea\u80fd\u662f\u5b57\u6bcd\u548c\u6570\u7ec4\uff0c\u4e14\u957f\u5ea6\u5fc5\u987b\u57284\u523025\u4e4b\u95f4! pass.requried=\u60a8\u5fc5\u987b\u8f93\u5165\u5bc6\u7801! pass.regex=\u60a8\u8f93\u5165\u7684\u5bc6\u7801\u53ea\u80fd\u662f\u5b57\u6bcd\u548c\u6570\u7ec4\uff0c\u4e14\u957f\u5ea6\u5fc5\u987b\u57284\u523025\u4e4b\u95f4! age.range=\u60a8\u7684\u5e74\u9f84\u5fc5\u987b\u5728${min}\u548c${max}\u4e4b\u95f4! birth.range=\u60a8\u7684\u751f\u65e5\u5fc5\u987b\u5728${min}\u548c${max}\u4e4b\u95f4!
<?xml version="1.0" encoding="GBK"?> <!-- 指定校验配置文件的DTD信息 --> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <!-- 校验文件的根元素 --> <validators> <!-- 校验Action的name属性 --> <field name="name"> <!-- 指定name属性必须满足必填规则 --> <field-validator type="requiredstring"> <param name="trim">true</param> <message key="name.requried"/> </field-validator> <!-- 指定name属性必须匹配正则表达式 --> <field-validator type="regex"> <param name="regex"><![CDATA[(\w{4,25})]]></param> <message key="name.regex"/> </field-validator> </field> <!-- 校验Action的pass属性 --> <field name="pass"> <!-- 指定pass属性必须满足必填规则 --> <field-validator type="requiredstring"> <param name="trim">true</param> <message key="pass.requried"/> </field-validator> <!-- 指定pass属性必须满足匹配指定的正则表达式 --> <field-validator type="regex"> <param name="regex"><![CDATA[(\w{4,25})]]></param> <message key="pass.regex"/> </field-validator> </field> <!-- 指定age属性必须在指定范围内--> <field name="age"> <field-validator type="int"> <param name="min">1</param> <param name="max">150</param> <message key="age.range"/> </field-validator> </field> <!-- 指定birth属性必须在指定范围内--> <field name="birth"> <field-validator type="date"> <!-- 下面指定日期字符串时,必须使用本Locale的日期格式 --> <param name="min">1900-01-01</param> <param name="max">2050-02-21</param> <message key="birth.range"/> </field-validator> </field> </validators>