struts2在学习(十一)--表单验证的两种方式
第二个示例:XML配置式校验器---登录和注册页面
user_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>Struts2中基于XML配置式的校验器使用示例</title> ?
????? </head> ?
????? <body> ?
??? <h3>XML配置式校验器---登录页面</h3><hr/> ?
??? <div style="color:red"><s:fielderror/></div> ?
??? <form action="user_login.action" method="post"> ?
??????? <table> ?
??????????? <tr> ?
??????????????? <td>登录名</td> ?
??????????????? <td><input type="text" name="user.name" value="${param['user.name']}"/></td> ?
??????????? </tr> ?
??????????? <tr> ?
??????????????? <td>密码</td> ?
??????????????? <td><input type="password" name="user.pwd"/></td> ?
??????????? </tr> ?
??????????? <tr><td colspan="2"><input type="submit" value=" 提交 "/></td></tr> ?
??????? </table> ?
??? </form> ?
????? </body> ?
??? </html>
?
user_registe.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>Struts2中基于XML配置式的校验器使用示例</title> ?
????? </head> ?
????? <body> ?
??? <h3>XML配置式校验器---注册页面</h3><hr/> ?
???? ?
??? <div style="color:red"><s:fielderror/></div> ?
??? <form action="user_registe.action" method="post"> ?
??????? <table> ?
??????????? <tr> ?
??????????????? <td>ID</td> ?
??????????????? <td><input type="text" name="user.id" value="${param['user.id']}"/></td> ?
??????????? </tr> ?
??????????? <tr> ?
??????????????? <td>登录名</td> ?
??????????????? <td><input type="text" name="user.name" value="${param['user.name']}"/></td> ?
??????????? </tr> ?
??????????? <tr> ?
??????????????? <td>密码</td> ?
??????????????? <td><input type="password" name="user.pwd"/></td> ?
??????????? </tr> ?
??????????? <tr> ?
??????????????? <td>重复密码</td> ?
??????????????? <td><input type="password" name="user.pwd2"/></td> ?
??????????? </tr> ?
??????????? <tr> ?
??????????????? <td>时间</td> ?
??????????????? <td><input type="text" name="user.registed_date" value="${param['user.registed_date']}"/></td> ?
??????????? </tr> ?
??????????? <tr> ?
??????????????? <td>email</td> ?
??????????????? <td><input type="text" name="user.email" value="${param['user.email']}"/></td> ?
??????????? </tr> ?
??????????? <tr> ?
??????????????? <td>考试成绩</td> ?
??????????????? <td><input type="text" name="user.score" value="${param['user.score']}"/></td> ?
??????????? </tr> ?
??????????? <tr> ?
??????????????? <td colspan="2"><input type="submit" value=" 提交 "/></td> ?
??????????? </tr> ?
??????? </table> ?
??? </form> ?
????? </body> ?
??? </html>
src/struts.xml
<?xml version="1.0" encoding="UTF-8" ?> ?
??? <!DOCTYPE struts PUBLIC ?
??????? "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" ?
??????? "http://struts.apache.org/dtds/struts-2.1.7.dtd"> ?
???? ?
??? <struts> ?
??????? <!-- 请求参数的编码方式 --> ?
??????? <constant name="struts.i18n.encoding" value="UTF-8"/> ?
??????? <!-- 指定被struts2处理的请求后缀类型。多个用逗号隔开 --> ?
??????? <constant name="struts.action.extension" value="action,do,go,xkk"/> ?
??????? <!-- 当struts.xml改动后,是否重新加载。默认值为false(生产环境下使用),开发阶段最好打开? --> ?
??????? <constant name="struts.configuration.xml.reload" value="true"/> ?
??????? <!-- 是否使用struts的开发模式。开发模式会有更多的调试信息。默认值为false(生产环境下使用),开发阶段最好打开? --> ?
??????? <constant name="struts.devMode" value="false"/> ?
??????? <!-- 设置浏览器是否缓存静态内容。默认值为true(生产环境下使用),开发阶段最好关闭? --> ?
??????? <constant name="struts.serve.static.browserCache" value="false" /> ?
??????? <!-- 是否允许在OGNL表达式中调用静态方法,默认值为false --> ?
??????? <constant name="struts.ognl.allowStaticMethodAccess" value="true"/> ?
???????? ?
??????? <!-- 指定由spring负责action对象的创建? ?
??????? <constant name="struts.objectFactory" value="spring" /> ?
??????? --> ?
??????? <!-- 是否开启动态方法调用 --> ?
??????? <constant name="struts.enable.DynamicMethodInvocation" value="false"/> ?
???????? ?
??????? <package name="my" extends="struts-default" namespace="/"> ?
??????????? <action name="user_*" method="{1}"> ?
??????????????? <result name="success">/info.jsp</result> ?
??????????????? <result name="input">/user_{1}.jsp</result> ?
??????????? </action> ?
??????? </package> ?
???????? ?
??? </struts> ?
?
UserAction.java
package com.javacrazyer.web.action; ?
???? ??????
??? import com.javacrazyer.domain.User; ?
??? import com.opensymphony.xwork2.ActionSupport; ?
???
???? ???? public class UserAction extends ActionSupport { ?
??????? private static final long serialVersionUID = -2554018432709689579L; ?
??????? private User user; //自定义类型Field ?
????? ?????????
??????? public String registe() throws Exception{ ?
??????????? System.out.println("registe======================"); ?
??????????? return SUCCESS; ?
??????? } ?
???????? ?
??????? public String login() throws Exception{ ?
??????????? return SUCCESS; ?
??????? } ?
??????? /*
??????? public void validate(){
??????????? System.out.println("调用validate方法");
??????? }
??????? ?
??????? //执行exceute方法前调用
??????? public void validateRegiste(){
??????????? System.out.println("调用validateRegiste方法");
??????????? String lname = user.getLoginname();
???????????? if(null != lname && !lname.trim().matches("[a-zA-Z_]\\w{3,19}")){
??????????????????? this.addFieldError("loginname", "用户名不能为空,且只能由4-20个字母和数字组成");
??????????????????? //this.addActionError("用户名不能为空,且只能由4-20个字母和数字组成");
??????????? }
??????? }
??????? ?
??????? public void validateLogin(){
??????????? System.out.println("调用validateLogin方法");
??????? }
??? */ ?
??????? public User getUser() { ?
??????????? return user; ?
??????? } ?
???? ?
??????? public void setUser(User user) { ?
??????????? this.user = user; ?
??????? } ?
???????? ?
??? }
?
UserAction-user_login-validation.xml
<?xml version="1.0" encoding="UTF-8"?> ?
??? <!DOCTYPE validators PUBLIC? ?
??????? "-//OpenSymphony Group//XWork Validator 1.0.2//EN"? ?
??????? "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> ?
??? <validators> ?
??????? <!-- 针对自定义Field使用visitor校验 --> ?
??????? <field name="user"> ?
??????????? <field-validator type="required" short-circuit="true"> ?
??????????????? <message>用户的信息必填</message><!-- 消息前缀 --> ?
??????????? </field-validator> ?
??????????? <field-validator type="visitor"> ?
??????????????? <param name="context">userLoginContext</param><!-- 指定本visitor校验的上下文 --> ?
??????????????? <param name="appendPrefix">true</param><!-- 是否要添加校验失败消息的前缀 --> ?
??????????????? <message>用户的</message><!-- 消息前缀 --> ?
??????????? </field-validator> ?
??????? </field> ?
??? </validators></span>?
UserAction-user_registe-validation.xml
<?xml version="1.0" encoding="UTF-8"?> ?
??? <!DOCTYPE validators PUBLIC? ?
??????? "-//OpenSymphony Group//XWork Validator 1.0.2//EN"? ?
??????? "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> ?
??? <validators> ?
??????? <!-- 针对自定义Field使用visitor校验 --> ?
??????? <field name="user"> ?
??????????? <field-validator type="required" short-circuit="true"> ?
??????????????? <message>用户的信息必填</message><!-- 消息前缀 --> ?
??????????? </field-validator> ?
??????????? <field-validator type="visitor"> ?
??????????????? <param name="context">userContext</param><!-- 指定本visitor校验的上下文 --> ?
??????????????? <param name="appendPrefix">true</param><!-- 是否要添加校验失败消息的前缀 --> ?
??????????????? <message>用户的</message><!-- 消息前缀 --> ?
??????????? </field-validator> ?
??????? </field> ?
??? </validators>
第三个示例:注解方式校验器---注册页面
acc2_registe.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>Struts2中基于Annotation配置式的校验器使用示例</title> ?
????? </head> ?
????? <body> ?
??? <h3>Annotation配置式校验器---注册页面</h3><hr/> ?
???? ?
??? <div style="color:red"><s:fielderror/></div> ?
??? <form action="acc2_registe.action" method="post"> ?
??????? <table> ?
??????????? <tr> ?
??????????????? <td>ID</td> ?
??????????????? <td><input type="text" name="id" value="${param.id}"/></td> ?
??????????? </tr> ?
??????????? <tr> ?
??????????????? <td>登录名</td> ?
??????????????? <td><input type="text" name="name" value="${param.name}"/></td> ?
??????????? </tr> ?
??????????? <tr> ?
??????????????? <td>密码</td> ?
??????????????? <td><input type="password" name="pwd"/></td> ?
??????????? </tr> ?
??????????? <tr> ?
??????????????? <td>重复密码</td> ?
??????????????? <td><input type="password" name="pwd2"/></td> ?
??????????? </tr> ?
??????????? <tr> ?
??????????????? <td>时间</td> ?
??????????????? <td><input type="text" name="registed_date" value="${param.registed_date}"/></td> ?
??????????? </tr> ?
??????????? <tr> ?
??????????????? <td>email</td> ?
??????????????? <td><input type="text" name="email" value="${param.email}"/></td> ?
??????????? </tr> ?
??????????? <tr> ?
??????????????? <td>考试成绩</td> ?
??????????????? <td><input type="text" name="score" value="${param.score}"/></td> ?
??????????? </tr> ?
??????????? <tr> ?
??????????????? <td colspan="2"><input type="submit" value=" 提交 "/></td> ?
??????????? </tr> ?
??????? </table> ?
??? </form> ?
????? </body> ?
??? </html>
src/struts.xml
<?xml version="1.0" encoding="UTF-8" ?> ?
??? <!DOCTYPE struts PUBLIC ?
??????? "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" ?
??????? "http://struts.apache.org/dtds/struts-2.1.7.dtd"> ?
???? ?
??? <struts> ?
??????? <!-- 请求参数的编码方式 --> ?
??????? <constant name="struts.i18n.encoding" value="UTF-8"/> ?
??????? <!-- 指定被struts2处理的请求后缀类型。多个用逗号隔开 --> ?
??????? <constant name="struts.action.extension" value="action,do,go,xkk"/> ?
??????? <!-- 当struts.xml改动后,是否重新加载。默认值为false(生产环境下使用),开发阶段最好打开? --> ?
??????? <constant name="struts.configuration.xml.reload" value="true"/> ?
??????? <!-- 是否使用struts的开发模式。开发模式会有更多的调试信息。默认值为false(生产环境下使用),开发阶段最好打开? --> ?
??????? <constant name="struts.devMode" value="false"/> ?
??????? <!-- 设置浏览器是否缓存静态内容。默认值为true(生产环境下使用),开发阶段最好关闭? --> ?
??????? <constant name="struts.serve.static.browserCache" value="false" /> ?
??????? <!-- 是否允许在OGNL表达式中调用静态方法,默认值为false --> ?
??????? <constant name="struts.ognl.allowStaticMethodAccess" value="true"/> ?
???????? ?
??????? <!-- 指定由spring负责action对象的创建? ?
??????? <constant name="struts.objectFactory" value="spring" /> ?
??????? --> ?
??????? <!-- 是否开启动态方法调用 --> ?
??????? <constant name="struts.enable.DynamicMethodInvocation" value="false"/> ?
???????? ?
??????? <package name="my" extends="struts-default" namespace="/"> ?
??????????????? <action name="acc2_*" method="{1}"> ?
??????????????? <result name="success">/info.jsp</result> ?
??????????????? <result name="input">/acc2_{1}.jsp</result> ?
??????????? </action> ?
??????? </package> ?
???????? ?
??? </struts> ?
Account2Action.java
package com.javacrazyer.web.action; ?
???? ?
??? import java.util.Date; ?
???? ?
??? import org.apache.struts2.interceptor.validation.SkipValidation; ?
???? ?
??? import com.opensymphony.xwork2.ActionSupport; ?
??? import com.opensymphony.xwork2.validator.annotations.FieldExpressionValidator; ?
??? import com.opensymphony.xwork2.validator.annotations.RegexFieldValidator; ?
??? import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator; ?
??? import com.opensymphony.xwork2.validator.annotations.Validations; ?
??? import com.opensymphony.xwork2.validator.annotations.ValidatorType; ?
???? ?
??? /**
???? * 使用注解来配置校验的示例
???? *
???? */ ?
??? public class Account2Action extends ActionSupport { ?
??????? private static final long serialVersionUID = -1418893621512812472L; ?
??????? private Integer id; ?
??????? private String name; ?
??????? private String pwd; ?
??????? private String pwd2; ?
??????? private Double score; ?
??????? private Date registed_date; ?
??????? private String email; ?
???????? ?
???????? ?
??????? @Validations( ?
??????????????? requiredStrings={@RequiredStringValidator(fieldName="name",message="我的用户名是必须的",shortCircuit=true,trim=true,type=ValidatorType.FIELD), ?
??????????????????????? @RequiredStringValidator(fieldName="pwd",message="我的密码是必须的",shortCircuit=true,trim=true,type=ValidatorType.FIELD)}, ?
??????????????? fieldExpressions={@FieldExpressionValidator(fieldName="pwd", message="两次密码不相同",expression="pwd==pwd2")}, ?
??????????????? regexFields={@RegexFieldValidator(expression="^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-])+((\\.com)|(\\.cn)|(\\.net)|(\\.org)|(\\.info)|(\\.edu)|(\\.mil)|(\\.gov)|(\\.biz)|(\\.ws)|(\\.us)|(\\.tv)|(\\.cc)|(\\.aero)|(\\.arpa)|(\\.coop)|(\\.int)|(\\.jobs)|(\\.museum)|(\\.name)|(\\.pro)|(\\.travel)|(\\.nato)|(\\..{2,3})|(\\..{2,3}\\..{2,3}))$")} ?
??????? ) ?
??????? public String registe() throws Exception{ ?
??????????? System.out.println("registe-------------------"); ?
??????????? return SUCCESS; ?
??????? } ?
???????? ?
??????? @SkipValidation ?
??????? public String login()throws Exception{ ?
??????????? return SUCCESS; ?
??????? } ?
???????? ?
??????? public Integer getId() { ?
??????????? return id; ?
??????? } ?
??????? public void setId(Integer id) { ?
??????????? this.id = id; ?
??????? } ?
??????? public String getName() { ?
??????????? return name; ?
??????? } ?
??????? public void setName(String name) { ?
??????????? this.name = name; ?
??????? } ?
??????? public Double getScore() { ?
??????????? return score; ?
??????? } ?
??????? public void setScore(Double score) { ?
??????????? this.score = score; ?
??????? } ?
??????? public Date getRegisted_date() { ?
??????????? return registed_date; ?
??????? } ?
??????? public void setRegisted_date(Date registedDate) { ?
??????????? registed_date = registedDate; ?
??????? } ?
??????? public String getEmail() { ?
??????????? return email; ?
??????? } ?
??????? public void setEmail(String email) { ?
??????????? this.email = email; ?
??????? } ?
???? ?
??????? public String getPwd() { ?
??????????? return pwd; ?
??????? } ?
???? ?
??????? public void setPwd(String pwd) { ?
??????????? this.pwd = pwd; ?
??????? } ?
???? ?
??????? public String getPwd2() { ?
??????????? return pwd2; ?
??????? } ?
???? ?
??????? public void setPwd2(String pwd2) { ?
??????????? this.pwd2 = pwd2; ?
??????? } ?
??? }
?
http://hi.baidu.com/kangjun118/blog/item/ad9219f5151eeede0b46e0e9.html