知识大全 动态Form

Posted 属性

篇首语:尺有所短;寸有所长。物有所不足;智有所不明。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 动态Form相关的知识,希望对你有一定的参考价值。

Struts1.x系列教程(14):动态Form  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  一 动态Form简介

  虽然ActionForm功能强大 但有些时候使用起来有些麻烦 如每建立一个用户录入界面(JSP页面) 就得建立一个ActionForm子类来和这个页面对应 当然 我们可以采用嵌套属性从一定程度上弥补这个问题 但是在建立新的用户录入界面时 仍不可避免地要建立新的ActionForm子类

  在Struts 及以后的Struts版本中提供了一种动态Form的技术 使得不用再建立新的ActionForm就可以封装用户提交的数据 实际上 这种技术将定义ActionForm子类的工作变成了编写XML文件的工作

  每定义一个动态Form 就要在struts config xml中加一个<form bean>元素 并使用<form property>子元素来定义动态Form的属性

  在本章的最后还会介绍一个LazyValidatorForm类 通过这个类甚至可以不定义动态Form的属性就可以使用动态Form 这将大大简化开发人员的工作量

  二 声明动态Form

  声明一个动态Form非常简单 只需要在struts config xml的<form beans>元素中加入一个<form bean>子元素 并使用<form property>元素来定义动态Form的属性 我们可以定义的属性类型有简单属性(如String) 索引属性(如数组) 映射属性(如 HashMap)以及嵌套属性(属性类型是另一个类)

  对于动态Form来说 Form的类型必须是 apache struts action DynaActionForm或其子类 声明一个动态Form的代码如下

   <form bean name= dynamicForm   type= apache struts action DynaActionForm >    <!  声明一个简单属性  >    <form property name= simpleProp  type= java lang String  initial= bill />    <!  声明一个索引属性  >    <form property name= indexedProp  type= java lang String[]  />    <!  声明一个映射属性  >    <form property name= mappedProp  type= java util HashMap  />    <!  声明一个嵌套属性  >    <form property name= nestedProp  type= bean MyBean  /></form bean>

  三 动态Form的属性类型

  下面列出了动态Form支持的简单属性的所有类型

   java math BigDecimaljava math BigIntegerjava lang Booleanjava lang Bytejava lang Characterjava lang Classjava lang Doublejava lang Floatjava lang Integerjava lang Longjava lang Shortjava lang Stringjava sql Datejava sql Timejava sql Timestamp

  实际上 上面的数据类型就是Java中提供了简单数据类型 它们用在动态Form中和在Java中代表的数据类型是完全一样的 我们还可以使用<form property>元素的initial属性为动态Form的简单属性指定一个默认值 如在例程 中name属性的默认值为 bill

  对于索引属性的类型来说 可以是数组 也可以是java util List接口的类(如ArrayList) 我们还可以为动态Form的属性指定实现java util Map接口的类作为数据类型(也就是映射属性) 但遗憾的是 如果使用动态Form 就无法使用泛型进行自动类型转换了

  四 访问动态Form

  我们可以使用DynaActionForm类的getter方法来读取动态Form中的属性值 DynaActionForm类的getter方法有三个重载形式 分别用来读取简单属性 索引属性和映射属性 这三个getter方法的定义如下

     public Object get(String name) ;   // 读取简单属性  public Object get(String name  int index) ;  // 读取索引属性  public Object get(String name  String key);  // 读取映射属性

  下面的代码演示了如何通过getter方法获得动态Form的属性值

   DynaActionForm dForm = (DynaActionForm)form;String name = (String)dForm get( name );String[] hobbies = (String[])dForm get( hobbies );String value  = (String)dForm get( myMap   key );

  除了上述的get方法外 DynaActionForm还提供了getString和getString方法 分别用来读取String和String[]类型的属性值 这两个方法的定义如下

   public String getString(String name) ;  public String[] getStrings(String name) ;

  下面的代码演示了如何通过getString和getStrings方法获得动态Form的属性值

   String name = dForm getString( name );  // 相当于String name = (String)dForm get( name );String[] hobbies = dForm getStrings( hobbies );  // 相当于String[] hobbies = (String[])dForm get( hobbies );

  在使用getString和getStrings方法时应注意 这两个方法只能读取String或String[]类型的属性 读取其他类型的属性将会抛出异常

  五 一个动态Form的例子

  我们在这一部分来实现一个完整的动态Form的例子 在这个例子中的动态Form有四个属性 三个是简单数据类型 一个是数组类型 完成这个例子需要如下四步

  【第 步】配置动态Form打开struts config xml 在<form beans>元素中加入如下的内容

   <form bean name= dynamicForm  type= apache struts action DynaActionForm >    <form property name= name  type= java lang String  />    <form property name= age  type= java lang Short  />    <form property name= salary  type= java lang Float  />    <form property name= hobby  type= java lang String[]  /></form bean>

  【第 步】编写Struts Action类

  这个Struts Action类负责从动态Form中获得属性值 并输出到客户端浏览器 在<samples工程目录> src action目录中建立一个DynamicAction java文件 代码如下

     package chapter action;    import javax servlet *;  import  apache struts action *;  import java io *;    public class DynamicAction extends Action        public ActionForward execute(ActionMapping mapping  ActionForm form               HttpServletRequest request  HttpServletResponse response)                try                        DynaActionForm dForm = (DynaActionForm) form;              String name = (String) dForm get( name );              Short age = (Short) dForm get( age );              Float salary = (Float) dForm get( salary );              // 获得数组类型字段值的数组长度              int hobbyCount = ((String[]) dForm get( hobby )) length;              PrintWriter out = response getWriter();              out println( name:   + name +  <p/> );              out println( age:   + age +  <p/> );              out println( salary:   + salary +  <p/> );              for (int i =  ; i < hobbyCount; i++)                  out println( hobby  + (i +  ) +  :   + dForm get( hobby  i) +  <p/> );                    catch (Exception e)                              return null;        

  【第 步】配置Struts Action

  打开struts config xml文件 在<action mappings>元素中加入如下的内容

   <action name= dynamicForm  path= /dynamic  scope= request  type= action DynamicAction  />

  【第 步】编写用户录入数据的JSP页面

  在Web根目录中建立一个dynamic jsp文件 代码如下

     <%@ page pageEncoding= GBK %>  <%@ taglib uri=  prefix= %>  <>    <head>      <title>测试动态Form</title>      <:base/>    </head>    <body>       <:form action= dynamic   >         姓  名 <:text property= name  />&nbsp;&nbsp;<p>         年  龄 <:text property= age  />&nbsp;&nbsp;<p>         工  资 <:text property= salary  />&nbsp;&nbsp;<p>         爱好 <:text property= hobby   value= />&nbsp;&nbsp;<p>         爱好 <:text property= hobby  value= />&nbsp;&nbsp;<p>         爱好 <:text property= hobby  value= />&nbsp;&nbsp;<p>                <:submit value= 提交  />      </:form>      </body>   </>

  启动Tomcat后 在IE中输入如下的URL来测试程序

  

  六 验证动态Form

  有两种方法可以验证动态Form

   在DynaActionForm的子类中覆蓋validate方法

   如果要使用Validator框架来验证动态Form 需要用DynaActionForm的子类 apache struts validator DynaValidatorForm或其子类来作为动态Form的类型

cha138/Article/program/Java/ky/201311/28114

相关参考

知识大全 处理一个form多个submit

Struts2教程2:处理一个form多个submit  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 LookupDispatchAction类处理一个form多个

Struts1.x系列教程(19):LookupDispatchAction类处理一个form多个  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜

知识大全 使用EventDispatchAction类处理一个form多

Struts1.x系列教程(20):使用EventDispatchAction类处理一个form多  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜

知识大全 将form保存到图片中

  publicvoidOnSaveJPG()  Rectanglerect=getBounds();  BufferedImageimage=  (BufferedImage)createImage

知识大全 如何从FORM中调用REPORT程序

如何从FORM中调用REPORT程序?  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在菜单中调用R

知识大全 jsp如何解决Form表单乱码问题

jsp如何解决Form表单乱码问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  网站程序中的F

知识大全 解析php防止form重复提交的方法

本篇文章是对php防止form重复提交的方法进行了详细的分析介绍需要的朋友参考下   php防止表单重复提交实例复制代码代码如下:<?phpsession_start();$_SESS

知识大全 ASP中使用Form和QueryString集合

ASP中使用Form和QueryString集合  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!li

知识大全 美国13 form 每个季度什么时候披露

美国13form每个季度什么时候披露美国的GDP按季度核算,在每个季度结束后的一个月月末,公布初步数值,再过一个月,公布该季度的重新核算数值,再过一个月,公布该季度的最终定值。相当于每个季度的GDP数

知识大全 改善Form提交数据的UI 交互设计

改善Form提交数据的UI交互设计  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数据一次校验&