validate使用

之前在项目中对于表单字段的验证,基本都是在action具体方法中,也没有用到struts的validate,如今进入新公司了,我感受有必要梳理一下前的作法。
这两天稍有空隙,对struts的验证框架使用进行了一些尝试总结,随后也打算对struts框架的各个方面都作一次比较详尽的开发级别的总结,方便未来的查看,避免因遗忘而致使的重复无谓的学习,网上有不少这方面资料,但我感受,只有本身总结提炼出来的,才会理解深入...


struts的验证能够有两种实现方式:
1.利用action名-validate.xml配置的方式。
2.在具体action中重写validate()方法。
首先看第一种(配置文件)代码示例:
jsp代码
 javascript

Html代码 复制代码 收藏代码
  1. <%@ page language="java" contentType="text/html; charset=utf-8"
  2. pageEncoding="utf-8"%>
  3. <%@ taglib prefix="s" uri="/struts-tags" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  7. <title>配置文件的错误验证处理</title>
  8. <s:head/>
  9. <body>
  10. <s:form action="validate.action" validate="true">
  11. <s:textfield name="realName" /><s:fielderror fieldName="realName" /><!--令fieldName为响应的textfield名字,则能够单独分开显示各属性的验证结果,而不是把全部的验证结果都展现出来--><br/>
  12.  
  13. <s:textfield name="phone" ></s:textfield><s:fielderror fieldName="phone" /><br/>
  14. <s:submit/>
  15. </s:form>
  16. </body>
  17. </html>

validate.jsp

action代码:
 html

Java代码 复制代码 收藏代码
  1. package com;
  2. import com.opensymphony.xwork2.ActionSupport;
  3. public class ValidateTestAction extends ActionSupport {
  4.  
  5. private String realName;
  6. private String phone;
  7. public String getRealName() {
  8. return realName;
  9. }
  10.  
  11. public void setRealName(String realName) {
  12. this.realName = realName;
  13. }
  14.  
  15. public String getPhone() {
  16. return phone;
  17. }
  18.  
  19. public void setPhone(String phone) {
  20. this.phone = phone;
  21. }
  22.  
  23. public String toValidate() {
  24.  
  25. return SUCCESS;
  26. }
  27.  
  28. public String doValidate() {
  29. System.out.println("realName:" + realName + "\tphone:" + phone);
  30.  
  31. return SUCCESS;
  32. }
  33.  
  34. }

ValidateTestAction.java

struts.xml配置:
 java

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
  4. "http://struts.apache.org/dtds/struts-2.1.dtd">
  5. <struts>
  6. <constant name="struts.ui.theme" value="simple" /> <!-- 配置不要自动生成table元素 -->
  7. <package name="abc" extends="struts-default" >
  8. <!-- struts校验框架测试类 -->
  9. <action name="validate" class="com.ValidateTestAction">
  10. <result name="input">/validate.jsp</result><!--使用验证框架则必须配置input -->
  11. </action>
  12. </package>
  13. </struts>

struts.xml

验证框架的配置(action类名+validate-xml的文件,放置于com包中,struts2会自动找到它)
 express

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd" >
  3. <validators >
  4. <field name ="realName" >
  5. <field-validator type ="requiredstring" > <!--requiredstring验证非空,验证顺序为自上而下,即同一个字段的多种提示信息不会同时展现于页面 -->
  6. <message>真实姓名不能为空 </message>
  7. </field-validator >
  8. <field-validator type="stringlength"> <!--stringlength验证字符串长度 -->
  9. <param name="maxLength">10</param>
  10. <message>
  11. 姓名必须在10字之内
  12. </message>
  13. </field-validator>
  14. </field>
  15. <field name ="phone" >
  16. <field-validator type ="requiredstring" >
  17. <message>手机号码不能为空 </message>
  18. </field-validator >
  19. </field>
  20. </validators>

ValidateTestAction-validation.xml

<!--在struts2中已经实现了不少经常使用验证,能够根据须要选用:
 apache

Xml代码 复制代码 收藏代码
  1. < validators >
  2. < validator name ="required" class ="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator" />
  3. < validator name ="requiredstring" class ="com.opensymphony.xwork2.validator.validators.RequiredStringValidator" /> 非空
  4. < validator name ="int" class ="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator" /> 输入为int
  5. < validator name ="double" class ="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator" /> 输入为double
  6. < validator name ="date" class ="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator" /> 输入为date
  7. < validator name ="expression" class ="com.opensymphony.xwork2.validator.validators.ExpressionValidator" />
  8. < validator name ="fieldexpression" class ="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator" />
  9. < validator name ="email" class ="com.opensymphony.xwork2.validator.validators.EmailValidator" />
  10. < validator name ="url" class ="com.opensymphony.xwork2.validator.validators.URLValidator" />
  11. < validator name ="visitor" class ="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator" />
  12. < validator name ="conversion" class ="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator" />
  13. < validator name ="stringlength" class ="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator" /> 字符串长度
  14. < validator name ="regex" class ="com.opensymphony.xwork2.validator.validators.RegexFieldValidator" />
  15. </validators >
  16. -->



再看一下重写validate方法的代码实现
先区分一下几个不一样的概念:
this.addFieldError("key",message);
一旦不为空将会跳转到input,用<s:fielderror/>标签显示.能够指定fieldname(集合中得key)属性来达到分开显示指定的验证信息。

this.addActionError("");
一旦不为空将会跳转到input,用<s:actionerror/>标签显示.

this.addActionMessage("");
这个只是一个提示信息,在下文页面中用<s:actionmessage/>展现集合中得所有message。

jsp代码:
 框架

Html代码 复制代码 收藏代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <%@ taglib prefix="s" uri="/struts-tags" %>
  3. <html>
  4. <head>
  5. <title>验证数据</title>
  6. </head>
  7.  
  8. <body>
  9. <s:actionerror/>
  10. <s:form action="overVali!doOverValidate.action">
  11. hello:<s:textfield name="msg"/>
  12. <s:fielderror name="msg" fieldName="msgMsg"/>
  13. <br/>
  14. phone : <s:textfield name="phone" />
  15. <s:fielderror name="phone" fieldName="phoneMsg" /><br/>
  16. <s:submit/>
  17. </s:form>
  18. </body>
  19. </html>

overwritevalidate.jsp

java代码
 jsp

Java代码 复制代码 收藏代码
  1. package com;
  2.  
  3. import com.opensymphony.xwork2.ActionSupport;
  4.  
  5. public class OvenWriteValidateAction extends ActionSupport {
  6.  
  7. private String msg;
  8. private String phone;
  9.  
  10. public String getPhone() {
  11. return phone;
  12. }
  13.  
  14. public void setPhone(String phone) {
  15. this.phone = phone;
  16. }
  17.  
  18. public String getMsg() {
  19. return msg;
  20. }
  21.  
  22. public void setMsg(String msg) {
  23. this.msg = msg;
  24. }
  25.  
  26. /**
  27. * 这样作存在一个问题,即凡是进入该action类的请求都将强制验证。
  28. */
  29. public void validate() {
  30.  
  31. if (msg==null||"".equals(msg)) {
  32. System.out.println(INPUT);
  33. this.addFieldError("msgMsg", "必须输入msg!");
  34.  
  35. this.addActionError("处理动做失败!");
  36. }
  37.  
  38. if(phone==null||"".equals(phone)){
  39. this.addFieldError("phoneMsg", "必须输入手机号!");
  40. }
  41. else {
  42. this.addActionMessage("提交成功");
  43. }
  44. /**
  45. *
  46. *
  47. * 你们从上面的代码能够看出,Field错误须要一个key(通常用来表示是哪个属性出的错误)
  48. * 而Action错误和Action消息只要提供一个信息字符串就能够了。
  49.  
  50. */
  51. }
  52.  
  53. public String test() {
  54.  
  55. return SUCCESS;
  56. }
  57.  
  58. public String doOverValidate() {
  59.  
  60. return SUCCESS;
  61. }
  62. }

OvenWriteValidateAction.java

struts.xml配置
 ide

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
  4. "http://struts.apache.org/dtds/struts-2.1.dtd">
  5. <struts>
  6. <constant name="struts.ui.theme" value="simple" /> <!-- 配置不要自动生成table元素 -->
  7. <package name="abc" extends="struts-default" >
  8. <global-results>
  9. <result name="success">/success.jsp</result>
  10. </global-results>
  11.  
  12. <!-- struts校验框架测试类 -->
  13. <action name="overVali" class="com.OvenWriteValidateAction">
  14. <result name="input">/overwritevalidate.jsp</result><!--使用验证框架则必须配置input -->
  15. </action>
  16.  
  17. </package>
  18. </struts>

struts.xml

目前我有疑问的地方但愿与有经验的朋友交流一下:
1.一旦作了validate的验证。
那么因此流经这个action类的请求都将经历一次验证,而实际上在一个action类中我只有一个方法须要验证,这就增添了麻烦。
2.利用上文中的第一种方式实现,导致每次进入action以前又多读取一个xml文档,这样会不会致使效率的下降,若是有影响,那么程度如何。学习

相关文章
相关标签/搜索