struts静态动态ActionForm使用(二)—验证
目录
登录例子
区别
时间属性
验证机制
这篇博客主要介绍使用struts框架常用的验证方式。public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) { ActionErrors errors=new ActionErrors(); if(username==null||"".equals(username)){ errors.add(username, new ActionMessage("error.username",username)); } if(password==null || "".equals(password)){ errors.add("password",new ActionMessage("error.password",password)); } if(!(birthday instanceof Date)){ errors.add("birthday",new ActionMessage("error.birthday",birthday)); } return errors;}
<action-mappings><action path="/login" type="com.login.LoginAction" name="loginForm"scope="request" input="/login/error.jsp" validate="true"><forward name="success" path="/login/success.jsp"></forward><forward name="false" path="/login/false.jsp"></forward></action></action-mappings>
<!-- 加载资源文件 --> <message-resources parameter="MessageResources" />注意资源文件放在src下。若是放在WebContent目录或web-inf下,则不会提示相应的错误信息。即使不报错。 并且上述的日期,其中使用Register注册了,上篇博客已经介绍,在此不再过多介绍。 这个action自带的验证的demo已经上传。点我下载。 第二种:使用validator框架。 其中validate验证,主要是由commons-validator.jar包。 那如何使用validator框架呢? 1.actionForm使用validator框架。 首先:编写actionForm 注意此时的actionForm不是继承ActionForm,而是继承ValidatorForm。 其中actionform中只有getset方法 其次:编写配置文件struts-config.xml中,加载验证插件以及使用资源文件。
<!-- 加载资源文件 --> <message-resources parameter="MessageResources" /><!-- 验证插件 --> <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/> </plug-in>其中,validator-rules.xml是公共的。而这个validation.xml是需要程序员编写。 然后:编写validation.xml验证信息。
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN" "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd"><form-validation> <formset><!-- form 的name必须与struts-config中名称一致 --> <form name="loginForm"> <field property="username" depends="required"> <!-- key值必须与资源文件中名称一致 --> <arg key="error.username"/> </field> <field property="password" depends="required"> <arg key="error.password"/> </field> <field property="birthday" depends="date"> <arg key="error.birthday"/> </field> </form> </formset></form-validation>formset可以包含多个form,并且form中需要验证的属性使用field标签。其中depends依赖验证规则的中的信息validator-rules.xml中的规则。比如:required,要求必填,date,日期格式,long,byte,mask正则等等。 其中的key值必须与资源文件的key一致。如第一种方法。 2.动态actionform使用validator框架。 动态的actionform在上篇博客已经介绍。在1的基础上,只改一下struts-config.xml配置文件中的动态actionform
<!-- 动态验证form --> <form-beans> <form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm"> <form-property name="username" type="java.lang.String"></form-property> <form-property name="password" type="java.lang.String"></form-property> <form-property name="birthday" type="java.util.Date"></form-property> </form-bean> </form-beans>其他的不用改变。 但是需要注意的是:使用validator框架的动态actionform的type类型是:DynaValidatorForm而不是DynaActionForm 3.应用在客户端,使用js提示。 在1的基础上只改一个login.jsp其他的不用改。 添加onsumit,并且添加个html:javascript标签
<html:javascript formName="loginForm"/> <html:form action="login.do" onsubmit="return validateLoginForm(this)"> username : <html:text property="username"/><br/> password : <html:password property="password"/><br> birthday: <html:text property="birthday"></html:text> <html:submit/> </html:form>需要注意的是:其中action不能使用"../",否则提示错误。 并且并不是所有的服务器校验都可以转化成客户端的js提示,其中日期的合法性验证,就不能转化成客户端js提示。 其中第二种方式的验证demo例子:点我下载