struts静态动态ActionForm使用(二)—验证

目录


登录例子

区别

时间属性

验证机制


这篇博客主要介绍使用struts框架常用的验证方式。

第一种:重写ActionForm的validate方法。
在actionForm中需要验证的都是表单的验证而非业务的验证。比如用户名非空,密码为数字,日期为时间格式等等。在validate方法中,返回ActionErrors信息,然后在错误页打印错误信息。
	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;
	}

代码解释:
使用这种ActionForm再带的验证方式,在配置文件中需要设置此action的validate属性为true,并且也要设置出现错误返回的错误页input属性。
struts-config.xml中action的配置如下:
	<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>

其中为了把错误显示出来,我们使用资源文件方式。
在validate方法中,new ActionMessage("error.birthday",birthday)中的"error.birthday"是资源文件的key值。
配置文件中加载资源文件:
<!-- 	加载资源文件 -->
    <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" οnsubmit="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例子: 点我下载

其中日期验证的测试 问题总结。
上述的demo中测试日期,验证规则使用的date关键字
1.因为默认的是java.sql.Date,若代码中使用的java.util.Date的类型,但是没有注册register,即使使用默认的yyyy-MM-dd格式,则也会报错。
若是注册register,界面使用yyyy-MM-dd默认格式,则成功,如使用yyyy/MM/dd格式【自己手写的转换类的时间格式】,则提示validator验证失败。
2.若代码中使用的java.sql.Date类型。没有注册register,使用默认yyyy-MM-dd格式,则成功。界面输入yyyy/MM/dd格式,则不能验证,报错。
若注册register,界面输入yyyy/MM/dd格式,也不能验证,报错。
3.如果birthday的验证规则是requried,date,则出现的现象是:若注册了,并且时间转换类中是yyyy/MM/dd格式,若界面输入yyyy/MM/dd格式,则validator验证的日期不一致。若输入其他的格式,比如yyyy-MM-dd格式,则提示requried
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值