要想明确struts的控制流程以及它核心API的实现原理(比方 Action/DispatchAction/ActionForm的实现原理),玩转struts1.2的关键就是可以玩转 ActionForm。

ActionForm的应用

1、——ActionForm的特性

1.创建一个form类必须继承于四个父类中的一个,比方ActionForm、ValidatorForm。

2.一个form类中的每个属性都将和页面中form表单中的每个表单元素一一相应

Example:

一个表单为:

<form>

 <input type="text" name="username"></input>

 <input type="password"name="password"></input>

 <input type="text" name="email"></input> 

</form>

一个与之相应的form类

public class UserForm extends ActionForm{

  private String username;

  private String password;

  private String email;

  private String address;

  

  //以下省略getter和setter方法

}

一个引用了该form类的appAction:

<form-beans>

 <form-bean name="userForm"type="form.UserForm"></form-bean>

</form-beans>

<action-mappings>

<action path="/test" type="action.TestAction"name="userForm" attribute="uf" scope="request"></action>

</action-mappings>

3.在引用了form-bean的action中name属性的值就是form-bean中name的值

4.这个userForm默认会被放在session中,使用scope能够指定存储该form对象的地方

2、——普通HTML表单使用Form的工作原理

ActionServlet 对struts-config进行解析时,当解析到某个action中存在一个属性name,那么ActionServlet中的 RequestProcessor就会依据该name的值找到相应的form-bean然后创建一个相应的form类实例,放在我们定义的存储范围中,当表单提交到action相应的appAction之前也就是到达FC的时候,FC会做下面事情:

1.依据路径找到相应的内存中存放着的配置对象中的action

2.依据action中的attribute属性,从session中得到一个相应的form实例

3.该form实例调用reset方法对自己进行清空

4.用表单中的值去填充该form实例

3、——Form与实体对象之间的关系

有的时候我们为了方便会把取到的form中的值直接复制到实体对象中去然后把实体对象再存储到数据库中,这样给我们的编程带来了非常多的方便,但前提是实体对象中须要拷贝的属性,form中要拷贝过去的属性,与form相应的表单元素他们三者必须一一 相应.这样我们就能够把表单中的值得到封装到form中然后再把form中与实体对象中属性同样的值复制到实体对象中。

Example:

entity:

public class User{

 private String name;

 private String password;

 private double salary;

 private String address;

 //省略getter和setter方法

}

form:

public class UserForm{

 private String name;

 private String password;

 private String salary;

 //省略getter和setter方法

}

表单:

<form>

 <input type="text" name="name"></input>

 <input type="password"name="password"></input>

 <input type="text" name="salary"></input>

</form>

1.把表单中的值赋值给UserForm

2.把UserForm中的值复制到User对象中:

//以下这条语句是在action的某个方法中做的所以form直接能够用

BeanUtils.copyProperties(user,form);

3.将user对象存放在数据库中

Struts ActionForm简单理解的更多相关文章

  1. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  2. Java 层级的简单理解

    在J2EE项目中,开发的都是分层来做的: 1.service层:用于暴露给网络调用 2.Impl层:统一规范接口 3.bean层:实体对象,也就是表 4.DAO(Data Access Object) ...

  3. git的简单理解及基础操作命令

    前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...

  4. [转]简单理解Socket

    简单理解Socket 转自 http://www.cnblogs.com/dolphinX/p/3460545.html  题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公 ...

  5. Js 职责链模式 简单理解

    js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...

  6. Deep learning:四十六(DropConnect简单理解)

    和maxout(maxout简单理解)一样,DropConnect也是在ICML2013上发表的,同样也是为了提高Deep Network的泛化能力的,两者都号称是对Dropout(Dropout简单 ...

  7. Deep learning:四十二(Denoise Autoencoder简单理解)

    前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Be ...

  8. 简单理解dropout

    dropout是CNN(卷积神经网络)中的一个trick,能防止过拟合. 关于dropout的详细内容,还是看论文原文好了: Hinton, G. E., et al. (2012). "I ...

  9. 我们为之奋斗过的C#-----C#的一个简单理解

    我们首先来简单叙述一下什么是.NET,以及C#的一个简单理解和他们俩的一个区别. 1 .NET概述 .NET是Microsoft.NET的简称,是基于Windows平台的一种技术.它包含了能在.NET ...

随机推荐

  1. MSSQL - 备份和还原数据库

    SQL语句备份和还原数据库:http://blog.csdn.net/liuhelong/article/details/3335687 1.MSSQL - SqlServer:此数据库处于单用户模式 ...

  2. 【linux】U-BOOT与linux kernel通信: struct tag

      欢迎转载,转载时需保留作者信息. 邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:http://b ...

  3. No resource found that matches the given name 'android:WindowTitle'

    当你的androidAPI 由2.1版本更换成2.2版本时:  res/vavlues/styles.xml中使用的android:WindowTitle会报以下异常, error: Error re ...

  4. php 中 return exit break contiue 详解

    return.break和contiue是语言结构,就如同if语句之类的,但是exit却是个函数. 1.exit函数 作用:Output a message and terminate the cur ...

  5. perl 函数回调 引用$client->run(sub {$client->sync});

    匿名函数引用: [root@wx03 wx]# perl a1.pl CODE(0x2077b30) test [root@wx03 wx]# cat a1.pl $ref= sub {return ...

  6. java 一个函数EnumMap返回多个值

    java 一个函数如何返回多个值   在开发过程中,经常会有这种情况,就是一个函数需要返回多个值,这是一个问题!! 网上这个问题的解决方法: 1.使用map返回值:这个方法问题是,你并不知道如何返回值 ...

  7. 公司简介 - CCDI悉地国际-工程实践专业服务的引领者

    公司简介 - CCDI悉地国际-工程实践专业服务的引领者 关于悉地国际         CCDI悉地国际(以下简称"CCDI")创立于1994年,是在城市建设和开发领域从事综合专业 ...

  8. PHP高级编程SPL

    这几天,我在学习PHP语言中的SPL. 这个东西应该属于PHP中的高级内容,看上去非常复杂,可是非常实用,所以我做了长篇笔记.不然记不住,以后要用的时候,还是要从头学起. 因为这是供自己參考的笔记,不 ...

  9. HDU5090模拟,hash

    /* HDU 5090 算是一道简单模拟题.但当中有非常深的hash思想 这是本人的第一道hash题 更是本人的第一道纸质代码不带编译不带执行提交AC的题 值得纪念 废话讲这么多之后,讲述题中思想 因 ...

  10. 关于for循环中i=0与i=arr.length容易被忽视的bug

    for循环中的这两种写法 for(var i=0,len=arr.length;i<len;i++){ } 上面这种是最为常见也是初学者经常写的 而下面这种写法,在性能上则是比上面的更好,然而我 ...