CSDN博客

img Arqui

(valildate)Validate下创建formbean

发表于2004/10/14 9:28:00  1037人阅读

validate下,struts提供三种formbean形式。

(1)创建一个特定的Form Bean对象:

package com.jamesholmes.minihr;

import org.apache.struts.validator
.ValidatorForm;


public class LogonForm extends ValidatorForm {
  private String username;
  private String password;
  
  public String getUsername() {
    return username;
  }
  
  public void setUsername(String 
username) {
    this.username = username;
  }


  public String getPassword() {
    return password;
  }
public void setPassword(String 
password) {
    this.password = password;
  }
}

这个类与你不是用Validator所创建的类相似,但它提供ValidatorForm而不是ActionForm。这个类也不提供ActionForm的空reset( )和validate( )方法的实施过程,因为ValidatorForm提供了相应过程。

在struts-config.xml文件中配置这个特定Form Bean的方法与配置正则Form Bean的方法相同:

<form-beans>
  <form-bean name="logonForm"
            type="com.jamesholmes
  .minihr.LogonForm"/>
</form-beans>

用表单标记的name属性给特定Form Bean指定的逻辑名是在定义validation.xml文件中的验证时所使用的名称,如下所示:

<!DOCTYPE form-validation 
PUBLIC "-//Apache Software Foundation//
       DTD Commons Validator Rules
       Configuration 1.0//EN"
       "http://jakarta.apache.org/
      commons/dtds/validator_1_0.dtd">


<form-validation>
  <formset>
    <form name="logonForm">
      <field property="username" 
            depends="required">
        <arg0 key="prompt.username"/>
      </field>
    </form>
  </formset>
</form-validation>

Validator使用该表单标记的name属性的值将验证定义与要应用这些定义的Form Bean的名称相匹配。


(2)创建一个动态的Form Bean对象:
<form-beans> <form-bean name="logonForm" type="org.apache .struts.validator.DynaValidatorForm"> <form-property name="username" type="java.lang.String"/> <form-property name="password" type="java.lang.String"/> </form-bean> </form-beans>

动态Form Bean不要求创建特定的Form Bean对象;相反,要定义Form Bean应该具有的属性和类型,而Struts为你动态创建Form Bean。
Validator允许你使用这个概念,就像在核心Struts中使用这个概念一样。与使用Validator的惟一区别就是要指定Form Bean是org.apache.struts.validator.DynaValidatorForm类型,
而不是org.apache.struts.action.DynaActionForm类型。
分配给动态Form Bean的逻辑名是在定义validation.xml文件中的验证时使用的名称。Validator使用与之相匹配的名称将这些验证与Form Bean联系在一起。

(3)创建一个高级的Form Bean对象:
将多个验证定义与一个Form Bean定义联系起来。当你使用基于validatorForm或基于DynaValidatorForm的Form Bean时,Validator使用struts-config.xml文件中的Form Bean的逻辑名称,
将Form Bean映射到validation.xml文件中的验证定义。

Validator提供了两个附加的ActionForm子类,它使你能够将验证与操作相关联,而不是与Form Bean相关联。这样你就可以根据哪个操作正在使用Form Bean来指定把哪些验证用于该Form Bean了。对于特定的Form Bean,你要像下面这样声明org.apache.struts.validator.ValidatorActionForm子类:

public class AddressForm extends ValidatorActionForm {
  ...
}

对于动态Form Bean,在struts-config.xml文件中为Form Bean定义指定org.apache.struts.validator.DynaValidatorActionForm的类型,如下所示:

<form-bean name="addressForm"
          type="org.apache.struts
.validator.DynaValidatorActionForm">
  ...
</form-bean>

在validation.xml文件中,把一组验证映射到一个操作路径,而不是映射到Form Bean名,因为如果你定义了Create Address和Edit Address两个操作(它们使用同一个Form Bean),那么每个操作都会有一个惟一的操作名,如下所示:

<action-mappings>
  <action path="/createAddress"
         type="com.jamesholmes
  .minihr.CreateAddressAction"
         name="addressForm"/>
  <action path="/editAddress"
         type="com.jamesholmes
  .minihr.EditAddressAction"
         name="addressForm"/>

</action-mappings>

下面的validation.xml文件片断显示了两组验证,它们用于同一个Form Bean,但却有不同的操作路径:

<formset>
  <form name="/createAddress">
    <field property="city"
          depends="required">
      <arg0 key="prompt.city"/>
    </field>
  </form>
  <form name="/editAddress">
    <field property="state"
          depends="required">
      <arg0 key="prompt.state"/>
    </field>
  </form>
</formset>

因为Form Bean要么属于ValidatorActionForm子类,要么属于DynaValidatorActionForm子类,所以Validator知道用一个操作路径代替Form Bean的逻辑名称来找出用于Form Bean的验证。

 

阅读全文
0 0

相关文章推荐

img
取 消
img