Struts2温习(8)表单验证的两种方式.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Struts2 温习 表单 验证 方式
- 资源描述:
-
Struts2温习(8)--表单验证的两种方式 XMLSpringJSP浏览器 1. Struts2中的输入校验 2. 编码方式校验 1) Action一定要继承自ActionSupport 2) 针对某个要进行校验的请求处理方法编写一个 public void validateXxx()方法,在方法内部进行表单数据校验. 3) 也可针对所有的请求处理方法编写public void validate()方法。 4) 在校验方法中,可以通过addFieldError()方法来添加字段校验错误消息。 5) 当校验失败时,Struts框架会自动跳转到name为input的Result页面。在校验失败页面中,可以使用<s:fielderror/>来显示错误消息 6) 简单,灵活。但重用性不高。 3. XML配置方式校验。在编码方式之前被执行。 1) 针对要校验的Action类,在同包下编写一个名为:Action类名-validation.xml校验规则文件。 2) 在校验规则文件中添加校验规则:具体的校验器名,参数可参看Struts2的reference或Struts2的API。 a) Field校验:针对Action类中每个非自定义类型的Field进行校验的规则。 <field name="要校验的Field名"> <field-validator type="校验规则器名" short-circuit="是否要短路径校验(默认是false)"> <param name="校验器要使用的参数名">值</param> <message>校验失败时的提示消息</message> </field-validator> <!-- 还可添加其它的校验规则 --> </field> b) 非Field校验:针对Action类的某些Field使用OGNL表达进行组合校验。 <validator type="fieldexpression"> <param name="fieldName">pwd</param> <param name="fieldName">pwd2</param> <param name="expression"><![CDATA[pwd==pwd2]]></param><!-- OGNL表达式 --> <message>确认密码和密码输入不一致</message> </validator> c) visitor校验:主要是用来校验Action类中的自定义类型Field。(针对使用模型驱动方式时) i) 在Action类的的校验规则文件中针对自定义类型Field使用visitor校验规则。 <!-- 针对自定义Field使用visitor校验 --> <field name="user"> <field-validator type="required" short-circuit="true"> <message>用户的信息必填</message><!-- 消息前缀 --> </field-validator> <field-validator type="visitor"><!-- 指定为visitor校验规则 --> <param name="context">userContext</param><!-- 指定本visitor校验的上下文名 --> <param name="appendPrefix">true</param><!-- 是否要添加校验失败消息的前缀 --> <message>用户的</message><!-- 消息前缀 --> </field-validator> </field> ii) 针对visitor的Field编写一个校验规则文件.文件名为: visitor字段类型名[-visitor校验的上下文名]-validation.xml. 例如: 本例中的文件名为User-userContext-validation.xml 注意: 此文件要存放到visitor字段类型所在的包下. iii) 在visitor的Field校验规则文件中针对要校验的Field添加校验规则. 3) 在校验失败页面(名为input的result页面)中,可以使用<s:fielderror/>来显示错误消息。 4) 默认情况下,XML的校验规则对Action中所有的请求处理方法生效.此时应该只针对每个要校验的请求处理方法指定校验。有两种方式: i) 只为Action中的指定方法指定校验规则文件,配置文件命名为:Action类型名-别名-validation.xml, 别名是要校验的方法对应的Action标签的name属性值。 如:UserAction在struts2.xml的配置为: <package name="my" extends="struts-default" namespace="/"> <action name="user_*" class="com.javacrazyer.web.action.UserAction" method="{1}"> <result name="success">/info.jsp</result> <result name="input">/user_{1}.jsp</result> </action> </package> ● UserAction中有registe方法和login方法,要对registe方法进行校验,则它的校验规则文件名为:UserAction-user_registe-validation.xml。 ● 如果使用visitor校验器,必需指定visitor校验的上下文名。 ii) 在校验拦截器中指定要验证的方法。不太实用。 <action name="user_*" class="com.javacrazyer.web.action.UserAction" method="{1}"> <result name="success">/info.jsp</result> <result name="input">/user_{1}.jsp</result> <interceptor-ref name="defaultStack"> <!-- 给校验拦截器指定不进行校验的方法列表:用逗号隔开 --> <param name="validation.excludeMethods">*</param> <!-- 给校验拦截器指定要进行校验的方法列表:用逗号隔开 --> <param name="validation.includeMethods">regist</param> </interceptor-ref> </action> 5) 同时使用客户端校验和服务器端校验 i) 设置<s:form>标签的validate属性: false:默认值。校验框架只执行服务器端校验。 true:先执行客户端校验,然后再执行服务器端校验。 form标签会根据你在服务器端配置的验证规则生成对应的JavaScript验证代码。 目前支持的内置校验器:required、requiredstring、stringlength、regex validator、email、url、int、double ii) 不太好用,不建议使用。建议使用jQuery进行页面表单校验。 6) 自定义校验器: i) 继承自FieldValidatorSupport抽象类。重写validate(Object obj)方法 ii) 注册校验器类. 在应用程序的classpath下新建一校验器注册文件。名为validators.xml,内容如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator Config 1.0//EN" " <validators> <validator name="校验器名" class="校验器类的全限定名"/> </validators> 4. Annotation方式校验: Struts2提供了注解的方式校验 1) @Validation 指明这个类或者接口将使用基于注解的校验。Struts2.1中已被标识为过时。 2) @Validations() 在同一个方法上要使用多个注解校验时。 3) @SkipValidation 指定某个方法不需要校验。否则所有方法都会使用校验。也可以在检验拦截器中使用validateAnnotatedMethodOnly 4) 13个内置校验器的注解版本:(注:这些注解都只能用在方法级别上) 具体参数参见Struts2的API或Reference。 @RequiredFieldValidator @RequiredStringValidator @StringLengthFieldValidator @IntRangeFieldValidator @DoubleRangeFieldValidator @DateRangeFieldValidator @ExpressionValidator @FieldExpressionValidator @RegexFieldValidator @EmailValidator @UrlValidator @VisitorFieldValidator @ConversionErrorFieldValidator 第一个示例:XML配置式校验器---注册页面 acc_registe.jsp Html代码 1. <span style="font-size: medium;"><%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2. <%@ taglib uri="/struts-tags" prefix="s" %> 3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4. <html> 5. <head> 6. <title>Struts2中基于XML配置式的校验器使用示例</title> 7. </head> 8. <body> 9. <h3>XML配置式校验器---注册页面</h3><hr/> 10. 11. <div style="color:red"><s:fielderror/></div> 12. <form action="acc_registe.action" method="post"> 13. <table> 14. <tr> 15. <td>ID</td> 16. <td><input type="text" name="id" value="${param.id}"/></td> 17. </tr> 18. <tr> 19. <td>登录名</td> 20. <td><input type="text" name="name" value="${param.name}"/></td> 21. </tr> 22. <tr> 23. <td>密码</td> 24. <td><input type="password" name="pwd"/></td> 25. </tr> 26. <tr> 27. <td>重复密码</td> 28. <td><input type="password" name="pwd2"/></td> 29. </tr> 30. <tr> 31. <td>时间</td> 32. <td><input type="text" name="registed_date" value="${param.registed_date}"/></td> 33. </tr> 34. <tr> 35. <td>email</td> 36. <td><input type="text" name="email" value="${param.email}"/></td> 37. </tr> 38. <tr> 39. <td>考试成绩</td> 40. <td><input type="text" name="score" value="${param.score}"/></td> 41. </tr> 42. <tr> 43. <td colspan="2"><input type="submit" value=" 提交 "/></td> 44. </tr> 45. </table> 46. </form> 47. </body> 48. </html></span> src/struts.xml Java代码 1. <span style="font-size: medium;"><?xml version="1.0" encoding="UTF-8" ?> 2. <!DOCTYPE struts PUBLIC 3. "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" 4. "http://struts.apache.org/dtds/struts-2.1.7.dtd"> 5. 6. <struts> 7. <!-- 请求参数的编码方式 --> 8. <constant name="struts.i18n.encoding" value="UTF-8"/> 9. <!-- 指定被struts2处理的请求后缀类型。多个用逗号隔开 --> 10. <constant name="struts.action.extension" value="action,do,go,xkk"/> 11. <!-- 当struts.xml改动后,是否重新加载。默认值为false(生产环境下使用),开发阶段最好打开 --> 12. <constant name="struts.configuration.xml.reload" value="true"/> 13. <!-- 是否使用struts的开发模式。开发模式会有更多的调试信息。默认值为false(生产环境下使用),开发阶段最好打开 --> 14. <constant name="struts.devMode" value="false"/> 15. <!-- 设置浏览器是否缓存静态内容。默认值为true(生产环境下使用),开发阶段最好关闭 --> 16. <constant name="struts.serve.static.browserCache" value="false" /> 17. <!-- 是否允许在OGNL表达式中调用静态方法,默认值为false --> 18. <constant name="struts.ognl.allowStaticMethodAccess" value="true"/> 19. 20. <!-- 指定由spring负责action对象的创建 21. <constant name="struts.objectFactory" value="spring" /> 22. --> 23. <!-- 是否开启动态方法调用 --> 24. <constant name="struts.enable.DynamicMethodInvocation" value="false"/> 25. 26. <package name="my" extends="struts-default" namespace="/"> 27. <action name="acc_*" class="com.javacrazyer.web.action.AccountAction" method="{1}"> 28. <result name="success">/info.jsp</result> 29. <result name="input">/acc_{1}.jsp</result> 30. </action> 31. 32. </package> 33. 34. </struts> 35. </span> AccountAction.java Java代码 1. <span style="font-size: medium;">package com.javacrazyer.web.action; 2. 3. import java.util.Date; 4. 5. import com.opensymphony.xwork2.ActionSupport; 6. 7. 8. public class AccountAction extends ActionSupport { 9. private static final long serialVersionUID = -1418893621512812472L; 10. private Integer id; 11. private String name; 12. private String pwd; 13. private String pwd2; 14. private Double score; 15. private Date registed_date; 16. private String email; 17. 18. public String registe() throws Exception{ 19. System.out.println("registe-------------------"); 20. return SUCCESS; 21. } 22. 23. public String login()throws Exception{ 24. return SUCCESS; 25. } 26. 27. public Integer getId() { 28. return id; 29. } 30. public void setId(Integer id) { 31. this.id = id; 32. } 33. public String getName() { 34. return name; 35. } 36. public void setName(String name) { 37. this.name = name; 38. } 39. public Double getScore() { 40. return score; 41. } 42. public void setScore(Double score) { 43. this.score = score; 44. } 45. public Date getRegisted_date() { 46. return registed_date; 47. } 48. public void setRegisted_date(Date registedDate) { 49. registed_date = registedDate; 50. } 51. public String getEmail() { 52. return email; 53. } 54. public void setEmail(String email) { 55. this.email = email; 56. } 57. 58. public String getPwd() { 59. return pwd; 60. } 61. 62. public void setPwd(String pwd) { 63. this.pwd = pwd; 64. } 65. 66. public String getPwd2() { 67. return pwd2; 68. } 69. 70. public void setPwd2(String pwd2) { 71. this.pwd2 = pwd2; 72. } 73. }</span> AccountAction-validation.xml [与AccountAction同目录] Java代码 1. <span style="font-size: medium;"><?xml version="1.0" encoding="UTF-8"?> 2. <!DOCTYPE validators PUBLIC 3. "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 4. " 5. <validators> 6. <!-- 字段校验 --> 7. <field name="id"> 8. <field-validator type="required" short-circuit="true"> 9. <message>ID必填的</message> 10. </field-validator> 11. <field-validator type="int"> 12. <param name="min">20</param> 13. <param name="max">50</param> 14. <message>ID必须在 ${min} 到 ${max} 之间</message> 15. </field-validator> 16. </field> 17. <field name="name"> 18. <field-validator type="requiredstring" short-circuit="true"> 19. <message>姓名是必填的</message> 20. </field-validator> 21. <field-validator type="regex"> 22. <param name="expression"><![CDATA[(^[a-zA-Z_]\w{3,9}$)]]></param> 23. <message>姓名不合法</message> 24. </field-validator> 25. </field> 26. <field name="pwd"> 27. <field-validator type="requiredstring" short-circuit="true"> 28. <message>密码是必填的</message> 29. </field-validator> 30. </field> 31. 32. <!-- 非字段校验 --> 33. <validator type="fieldexpression"> 34. <param name="fieldName">pwd</param> 35. <param name="fieldName">pwd2</param> 36. <param name="expression"><![CDATA[pwd==pwd2]]></param><!-- OGNL表达式 --> 37. <message>确认密码和密码输入不一致</message> 38. </validator> 39. 40. <field name="score"> 41. <field-validator type="double"> 42. <param name="minInclusive">0.0</param> 43. <param name="maxInclusive">100.0</param> 44. <message>成绩必须在${minInclusive}和${maxInclusive}之间</message> 45. </field-validator> 46. </field> 47. <field name="email" > 48. <field-validator type="regex"> 49. <param name="expression"><![CDATA[(^[_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}))$)]]></param> 50. <message>邮箱不合法</message> 51. </field-validator> 52. </field> 53. 54. <field name="registed_date"> 55. <field-validator type="date"> 56. <param name="min">1970-01-01</param> 57. <param name="max">2019-01-01</param> 58. <message>注册日期不合法</message> 59. </field-validator> 60. </field> 61. </validators></span> 第二个示例:XML配置式校验器---登录和注册页面 user_login.jsp Html代码 1. <span style="font-size: medium;"><%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2. <%@ taglib uri="/struts-tags" prefix="s" %> 3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4. <html> 5. <head> 6. <title>Struts2中基于XML配置式的校验器使用示例</title> 7. </head> 8. <body> 9. <h3>XML配置式校验器---登录页面</h3><hr/> 10. <div style="color:red"><s:fielderror/></div> 11. <form action="user_login.action" method="post"> 12. <table> 13. <tr> 14. <td>登录名</td> 15. <td><input type="text" name="user.name" value="${param['user.name']}"/></td> 16. </tr> 17. <tr> 18. <td>密码</td> 19. <td><input type="password" name="user.pwd"/></td> 20. </tr> 21. <tr><td colspan="2"><input type="submit" value=" 提交 "/></td></tr> 22. </table> 23. </form> 24. </body> 25. </html></span> user_registe.jsp Html代码 1. <span style="font-size: medium;"><%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2. <%@ taglib uri="/struts-tags" prefix="s" %> 3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4. <html> 5. <head> 6. <title>Struts2中基于XML配置式的校验器使用示例</title> 7. </head> 8. <body> 9. <h3>XML配置式校验器---注册页面</h3><hr/> 10. 11. <div style="color:red"><s:fielderror/></div> 12. <form action="user_registe.action" method="post"> 13. <table> 14. <tr> 15. <td>ID</td> 16. <td><input type="text" name="user.id" value="${param['user.id']}"/></td> 17展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




Struts2温习(8)表单验证的两种方式.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/12004563.html