struts2第一回:validate框架使用
struts2总结
第一回 validate框架的使用
以前在项目中对于表单字段的验证,基本都是在action具体方法中,也没有用到struts的validate,现在进入新公司了,我感觉有必要梳理一下前的做法。
这两天稍有空隙,对struts的验证框架使用进行了一些尝试总结,随后也打算对struts框架的各个方面都做一次比较详尽的开发级别的总结,方便将来的查看,避免因遗忘而导致的重复无谓的学习,网上有很多这方面资料,但我感觉,只有自己总结提炼出来的,才会理解深刻...
struts的验证可以有两种实现方式:
1.利用action名-validate.xml配置的方式。
2.在具体action中重写validate()方法。
首先看第一种(配置文件)代码示例:
jsp代码
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>配置文件的错误验证处理</title><s:head/><body><s:form action="validate.action" validate="true"><s:textfield name="realName" /><s:fielderror fieldName="realName" /><!--令fieldName为响应的textfield名字,则可以单独分开显示各属性的验证结果,而不是把所有的验证结果都展示出来--><br/> <s:textfield name="phone" ></s:textfield><s:fielderror fieldName="phone" /><br/><s:submit/></s:form></body></html>validate.jsp
package com;import com.opensymphony.xwork2.ActionSupport;public class ValidateTestAction extends ActionSupport {private String realName;private String phone;public String getRealName() {return realName;}public void setRealName(String realName) {this.realName = realName;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String toValidate() { return SUCCESS;}public String doValidate() {System.out.println("realName:" + realName + "\tphone:" + phone);return SUCCESS;}}ValidateTestAction.java
<?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> <constant name="struts.ui.theme" value="simple" /> <!-- 配置不要自动生成table元素 --><package name="abc" extends="struts-default" ><!-- struts校验框架测试类 --><action name="validate" name="code"><?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd" > <validators > <field name ="realName" > <field-validator type ="requiredstring" > <!--requiredstring验证非空,验证顺序为自上而下,即同一个字段的多种提示信息不会同时展示于页面 --> <message>真实姓名不能为空 </message> </field-validator > <field-validator type="stringlength"> <!--stringlength验证字符串长度 --><param name="maxLength">10</param><message>姓名必须在10字以内</message></field-validator> </field> <field name ="phone" > <field-validator type ="requiredstring" > <message>手机号码不能为空 </message> </field-validator > </field> </validators>ValidateTestAction-validation.xml
< validators > < validator name ="required" class ="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator" /> < validator name ="requiredstring" class ="com.opensymphony.xwork2.validator.validators.RequiredStringValidator" /> 非空 < validator name ="int" class ="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator" /> 输入为int < validator name ="double" class ="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator" /> 输入为double < validator name ="date" class ="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator" /> 输入为date < validator name ="expression" class ="com.opensymphony.xwork2.validator.validators.ExpressionValidator" /> < validator name ="fieldexpression" class ="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator" /> < validator name ="email" class ="com.opensymphony.xwork2.validator.validators.EmailValidator" /> < validator name ="url" class ="com.opensymphony.xwork2.validator.validators.URLValidator" /> < validator name ="visitor" class ="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator" /> < validator name ="conversion" class ="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator" /> < validator name ="stringlength" class ="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator" /> 字符串长度 < validator name ="regex" class ="com.opensymphony.xwork2.validator.validators.RegexFieldValidator" /> </validators > -->
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib prefix="s" uri="/struts-tags" %><html> <head> <title>验证数据</title> </head> <body> <s:actionerror/> <s:form action="overVali!doOverValidate.action"> hello:<s:textfield name="msg"/> <s:fielderror name="msg" fieldName="msgMsg"/> <br/> phone : <s:textfield name="phone" /> <s:fielderror name="phone" fieldName="phoneMsg" /><br/> <s:submit/> </s:form> </body></html>overwritevalidate.jsp
package com;import com.opensymphony.xwork2.ActionSupport;public class OvenWriteValidateAction extends ActionSupport {private String msg; private String phone; public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;} /** * 这样做存在一个问题,即凡是进入该action类的请求都将强制验证。 */public void validate() {if (msg==null||"".equals(msg)) {System.out.println(INPUT);this.addFieldError("msgMsg", "必须输入msg!");this.addActionError("处理动作失败!");} if(phone==null||"".equals(phone)){this.addFieldError("phoneMsg", "必须输入手机号!");}else {this.addActionMessage("提交成功");}/** * * * 大家从上面的代码可以看出,Field错误需要一个key(一般用来表示是哪一个属性出的错误) * 而Action错误和Action消息只要提供一个信息字符串就可以了。 */}public String test() {return SUCCESS;}public String doOverValidate() {return SUCCESS;}}OvenWriteValidateAction.java
<?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> <constant name="struts.ui.theme" value="simple" /> <!-- 配置不要自动生成table元素 --><package name="abc" extends="struts-default" ><global-results><result name="success">/success.jsp</result></global-results><!-- struts校验框架测试类 --><action name="overVali" class="com.OvenWriteValidateAction"><result name="input">/overwritevalidate.jsp</result><!--使用验证框架则必须配置input --></action></package></struts>struts.xml