在J2EE中,绝大部分客户端的数据都是通过表单提交到服务器端,而关于表单数据的收集,都是由Struts核心控制器ActionServlet完成的,它是通过标准的JavaBean命名规范来将表单数据封装在ActionForm中;
ActionForm用于封装用户的请求参数,而请求参数是通过JSP页面的表单域传递过来的,因此要保证ActionForm的参数属性与表单域的名字相同,注意ActionServlet并不是通过ActionForm中的私有属性的名称来进行封装注值,因为这个私有属性对外部属性是不可见的。因此ActionServlet是通过对应额setter和getter方法来封装注值的。
ActionFrom的生命周期:
说明:
在每次为ActionForm赋值前调用他的reset方法,其作用是使ActionForm中的值恢复初始状态,在应用中,我们可以通过在reset中为变量赋初值的方式,使得页面上的某个对象有显示值。
如果可视范围是request,则reset方法并不是很重要,因为你每次调用时都会产生一个新的ActionForm实例,所以你所操作的ActionForm不会与别人分享同时也就不会受别人的影响;如果可视范围是 session,由于在session范围内此ActionForm是唯一的,所以你在session范围内需要用到此ActionForm的地方调用的都是同一个ActionForm,要是你没有在reset中对变量赋初值那么前一次调用ActionForm是为它赋的值将在此次调用时有效,这到也没什么。但是,如果恰巧再次调用时你仅仅需要为ActionForm中的一部分变量赋值,那么其余的变量将保持上一次得到的值,这样你就得到了一个“新旧混合体”,我想这多半不是你所期望的;如果可视范围是application,那其影响就更是不难理解了,这时不但是你自己会影响你自己,使用应用的其他用户的操作也会影响到你。
ActionForm Bean从应用和配置的角度分为两类:动态ActionForm和静态ActionForm都是成对出现的,作用一样,只是实现不一样;
1、静态ActionForm:由程序员手工编写Form
1.ActionForm:提交表单的字段名和form中的属性名一致。
2.ValidatorForm:用于验证框架的Form,在请求参数前,先使用验证框架验证。 在struts-config中对应的action标签的validate值为true。 基于Form name的校验
3.ValidatorActionForm:基于Form path的校验
二、动态ActionForm:(通过配置文件完成ActionForm配置 )
Struts提供了动态ActionForm类,通过动态ActionForm,可以完全不用书写ActionForm,只需在struts-config.xml文件中配置即可,所有的动态ActionForm的实现类都必须是org.apache.struts.action.DynaActionForm类,或者是他的子类。
因为系统不清楚动态ActionForm属性,所以必须在配置文件中配置对应的属性,可以form-property元素来配置动态ActionForm的属性
<form-bean name="TeacherForm" type="org.lxh.form.TeacherForm"> <form-property name="id" type="java.lang.Integer" /> <form-property name="name" type="java.lang.String" /> </form-bean>
从上面的配置文件可以看出,动态ActionForm的配置必须增加form-property元素,每个属性必须对应一个form-property元素,其包含两个属性,一个是name,必须与jsp页面的表单域的名字相同,另一个是type,为属性的类型;
使用动态ActionForm同样用于封装用户请求参数,同时也不需要编写ActionForm类了,但该ActionForm没有各属性的getter和setter,因此无法调用对应的getter方法来解析请求参数,我们这样使用:
public ActionForward add(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { DynaActionForm dynaActionForm = (DynaActionForm) form; String username = (String) dynaActionForm.get("username"); String password = (String) dynaActionForm.get("password"); UserPersistent userPersistent = new UserPersistent(); if (userPersistent.addUser(username, password)) { return mapping.findForward("success"); } else { return mapping.findForward("error"); } }
使用动态ActionForm时,请求参数必须使用DynaActionForm的getter方法获取,有如下三种;
Object get(java.lang.String name):根据属性名返回对应的值;
Object get(java.lang.String name,int index):对于有多个重名表单域的情况,Struts将其当成数组处理,此处根据表单域和索引获取对应值;
Object get(java.lang.String name,java.lang.String key):对于使用Map属性的情况,根据属性名及对应key,获取对应的值;
动态ActionForm总结:
使用动态ActionForm的目的是为了减少代码的书写量,但是配置变得更复杂了,而普通ActionForm使解析请求参数变得更直观;动态ActionForm其实就是把页面中的html元素的名称和值放到了map中,所以通过get方法可以取出相应的值;
但是,其reset方法和validate方法调用不了,不能继承,所以不够灵活
1.DynaActionForm
<form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm"> <form-property name="username" type="java.lang.String"/> <form-property name="password" type="java.lang.String"/> </form-bean>
DynaActionForm lForm = (DynaActionForm)form; String username = (String) lForm.get("username"); String password = (String) lForm.get("password"); System.out.println("username:"+username+"->"+password); return mapping.findForward("success");
无法提供默认的验证行为。
2.DynaValidatorForm :和ValidatorForm一样在使用验证框架时使用。配置和DynaActionForm类似。
type="org.apache.struts.validator.DynaValidatorForm"
3.DynaValidatorActionForm:
ValidatorActionForm和DynaValidatorActionForm也都是在使用验证框架时使用,和DynaValidatorForm及ValidatorForm不同的是,在配置validtion.xml中<form name=path> name使用的是action的path属性值。以此来区分不同请求的验证规则。
三.还有一种特殊的Form ,LazyValidatorForm。
<form-bean name="loginForm" type="org.apache.struts.validator.LazyValidatorForm"></form-bean>
我们没有配置form的属性。所以在jsp页面中必须使用struts标签。
<br>基本使用方式<br>Customer Name:<html:text property="username"></html:text> <br>Customer Code:<html:text property="usercode"></html:text> <br> <br>自动封装Map<br>国家:<html:text property="address(nation)"></html:text> <br>省份:<html:text property="address(state)"></html:text> <br>城市:<html:text property="address(city)"></html:text>
这样就可以直接进行验证框架和action中的取值。
LazyValidatorForm lz = (LazyValidatorForm)form; String username = (String)lz.get("username"); String usercode = (String)lz.get("usercode"); System.out.println("name---" + username + " usercode---" + usercode); Map m = (Map)lz.get("address"); System.out.println(m.get("nation")); System.out.println(m.get("state")); System.out.println(m.get("city")); return null;
LazyValidatorForm总结:
1、不需写Java类
2、不需要配置属性
3、对页面没有任何要求
4、可以支持验证
相关推荐
这个"struts1.3.jar"文件是Struts 1.3版本的核心库,它集成了框架的各种组件,使得开发者能够构建基于Model-View-Controller (MVC)设计模式的Web应用。以下是关于Struts 1.3框架及其核心库的一些关键知识点: 1. **...
其次,Struts1.3增强了ActionForm类,提供了更多数据验证和处理的选项,使得表单处理更加规范和便捷。此外,这个版本还加强了国际化支持,使得应用可以轻松地适应多种语言环境。 在Struts1中,核心的jar文件包括...
Struts 1.3 是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,由Apache软件基金会开发并维护。这个框架为开发者提供了一种组织和控制Web应用程序的方式,使得代码更加结构化,易于维护。在本文中,...
在Struts1.3中,ActionForm对象用于接收和验证用户输入,Action类处理业务逻辑,而配置文件(struts-config.xml)则定义了请求与Action间的映射关系。 2. Spring3.0: Spring是另一个核心Java框架,它提供了一个...
Struts 1.3框架是Apache软件基金会的一个开源项目,它是Java EE平台上用于构建MVC(Model-View-Controller)架构的应用程序的经典框架。这个框架的源代码是开发者深入理解其工作原理、自定义行为以及优化应用的关键...
Struts 1.3 API 是一个用于构建基于Java的企业级Web应用程序的重要框架。这个API文档是开发者学习和理解Struts框架核心功能的关键资源,虽然它提供了英文版本,但其丰富的信息对于深入理解Struts的工作原理至关重要...
Struts1.3是Apache软件基金会的Jakarta项目下的一个开源框架,主要用于构建基于Java的Web应用程序。这个框架提供了一种结构化的应用开发方式,它将业务逻辑、控制流程和表现层进行了分离,使得开发过程更为高效且...
Struts1.3 API 是一个基于Java的开源框架,用于构建企业级的Web应用程序。它遵循Model-View-Controller (MVC) 设计模式,帮助开发者有效地管理应用程序的业务逻辑、用户界面和数据处理。Struts1.3是Struts框架的一个...
- **ActionForm**:虽然在Struts 1.3中,ActionForm已经被Action支持的模型对象所取代,但在早期版本中,ActionForm用于封装表单数据,从视图层传递到控制器层。 - **配置文件**:包括struts-config.xml和web.xml...
1. 验证器分离:在Struts1.2中,验证逻辑通常与ActionForm类混在一起,而在Struts1.3中,验证逻辑被迁移到了单独的配置文件,使得代码更易于维护。 2. 动态验证:Struts1.3的DynaValidator允许动态验证,这是1.2所不...
Struts1.3是Apache软件基金会的一个开源项目,它是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架。这个框架的主要目的是为了简化开发过程,提高可维护性和可扩展性。Struts1.3源代码的分析...
- Struts 1.x的主要组件包括ActionForm、Action、Dispatcher(现在称为Servlet Filter)、配置文件(struts-config.xml)等。它的MVC模式帮助分离业务逻辑和视图层,简化了Web应用的开发。 这三者组合在一起,可能...
1. **Action类和ActionForm类**:在Struts1.3中,Action类是核心控制器,负责接收用户请求并调用相应的业务逻辑。ActionForm类则用于封装请求参数,它在Action之间传递数据,实现了模型层与视图层之间的解耦。 2. *...
**Struts1.3框架详解** Struts1.3是Apache组织开发的一个开源MVC(Model-View-Controller)框架,它为Java Web应用程序提供了一种结构化的方式来组织代码,提高了开发效率和代码的可维护性。这个"struts1.3+MYSQL...
Struts 1.3 API 文档是 Apache Struts 框架的一个重要组成部分,它为开发者提供了详尽的函数库接口、类和方法的参考信息。这个框架是用于构建基于模型-视图-控制器(MVC)架构的 Java Web 应用程序。API 文档通常以 ...
Struts1.3是Apache软件基金会的一个开源框架,主要用于构建基于Java EE的Web应用程序。它遵循Model-View-Controller(MVC)设计模式,提供了一种结构化的方式来组织应用程序,使得开发人员能够更有效地处理业务逻辑...
这个API文档涵盖了Struts 1.3和2.0两个版本,这两个版本在Web开发领域都有着广泛的应用。Struts 1.3是早期的版本,而Struts 2.0则是其后续的升级版,引入了许多新的特性和改进。 1. **Struts 1.3 API** - **Action...
Struts1.3 + Hibernate BBS论坛是一个基于Java Web开发的经典项目,利用了Struts1.3框架和Hibernate ORM框架,结合MyEclipse集成开发环境、MySQL5.0数据库以及Tomcat5.0以上的应用服务器。这个项目展示了如何在实际...
这个“struts1.3.rar”压缩包包含了Struts 1.3版本的核心库和其他相关依赖,使得开发者能够快速地搭建和运行Struts应用。下面我们将深入探讨Struts 1.3的关键组件和它们在开发过程中的作用。 1. **Struts Core** (`...