在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、可以支持验证
相关推荐
Struts 1.3 备忘笔记 【资源特点】 1、以项目形式组织,包含所有的源代码 2、内含详细的注释说明 3、知识点较全面 【内容目录】 01 Struts_01HandworkApply : 手工配置Struct应用程序,演示用户提交数据后服务器的...
1.3 Struts框架中的组件 5 1.3.1 Struts配置文件 5 1.3.2 ActionServlet类 8 1.3.3 ActionMapping类 10 1.3.4 Action类 10 1.3.5 ActionForm类 11 1.3.6 ActionForward类 12 1.3.7 错误处理 12 2 Struts标记库 14 ...
1.3 Struts1.0学习文档 8 1.3 JSP流行模板Struts的安装配置 8 1.4Struts 用户指南 8 1.5 你的第一个struts应用程序 8 第2章深入Struts结构 8 2.1人介绍应用框架 mvc和model2 8 2.2 Struts原理、开发及项目实施 8 2.3...
1.3 Struts 2框架 9 1.3.1 Struts 2简史 9 1.3.2 Struts 2概览:MVC模式 10 1.3.3 Struts 2的工作原理 12 1.4 小结 14 第2章 初识Struts 2 16 2.1 声明性架构 16 2.1.1 两种配置 16 2.1.2 声明架构的两种方式 17 ...
1.3. Struts 框架中的组件.3 1.3.1. Struts配置文件.3 1.4. ActionServlet类6 1.4.1. ActionServlet配置6 1.4.2. ActionServlet方法7 1.5. ActionMapping 类8 1.6. Action 类.8 1.6.1. Action 类的方法.9 1.7. ...
1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 J2EE核心技术 1.4.1 Servlet 1.4.2 JSP(Java服务页面) 1.4.3 EJB(企业JavaBean) 1.4.4 JDBC(Java数据库连接) 1.4.5 JTA/JTS(Java事务) 1.4.6 JNDI(Java...
1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 J2EE核心技术 1.4.1 Servlet 1.4.2 JSP(Java服务页面) 1.4.3 EJB(企业JavaBean) 1.4.4 JDBC(Java数据库连接) 1.4.5 JTA/JTS(Java事务) 1.4.6 JNDI(Java...
1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 J2EE核心技术 1.4.1 Servlet 1.4.2 JSP(Java服务页面) 1.4.3 EJB(企业JavaBean) 1.4.4 JDBC(Java数据库连接) 1.4.5 JTA/JTS(Java事务) 1.4.6 JNDI(Java...
1.3 小结..... 7 第2章 Struts基础...... 8 2.1 MVC模式概述..... 8 2.1.1 MVC设计模式..... 8 2.1.2 JSP Model 1与JSP Model 2.. 9 2.2 Struts的体系架构..... 10 2.3 Struts控制器组件类..... 12 2.3.1 Action...
1.3 Java EE参与人员的角色 9 1.4 开发工具Eclipse 10 1.5 小结 13 第2章 使用Jakarta Commons来简化开发 14 2.1 Jakarta Commons的功能和用法 14 2.2 小结 18 第3章 Java EE容器 19 3.1 什么是容器 ...
1.3 获取和阅读MyEclipse帮助文档 5 1.4 本章小结 5 第2章 MyEclipse集成开发环境的使用 6 2.1 MyEclipse集成开发工具界面 6 2.1.1 MyEclipse的菜单栏 7 2.1.2 MyEclipse的工具栏 13 2.1.3 MyEclipse的透视图 14 ...
1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 J2EE核心技术 1.4.1 Servlet 1.4.2 JSP(Java服务页面) 1.4.3 EJB(企业JavaBean) 1.4.4 JDBC(Java数据库连接) 1.4.5 JTA/JTS(Java事务) 1.4.6 JNDI(Java...
1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发框架 1.6、本章摘要 1.7、开发实战讲解 第2章 HTML、JavaScript简介 2.1、服务器与浏览器 2.2、HTML简介 2.2.1、HTML元素概览 2.2.2、创建...
1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发框架 1.6、本章摘要 1.7、开发实战讲解 第2章 HTML、JavaScript简介 2.1、服务器与浏览器 2.2、HTML简介 2.2.1、HTML元素概览 2.2.2、创建显示...
1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发框架 1.6、本章摘要 1.7、开发实战讲解 第2章 HTML、JavaScript简介 2.1、服务器与浏览器 2.2、HTML简介 2.2.1、HTML元素概览 2.2.2、创建...
1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发框架 1.6、本章摘要 1.7、开发实战讲解 第2章 HTML、JavaScript简介 2.1、服务器与浏览器 2.2、HTML简介 2.2.1、HTML元素概览 2.2.2、创建显示...
1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发框架 1.6、本章摘要 1.7、开发实战讲解 第2章 HTML、JavaScript简介 2.1、服务器与浏览器 2.2、HTML简介 2.2.1、HTML元素概览 2.2.2、创建显示...
1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发框架 1.6、本章摘要 1.7、开发实战讲解 第2章 HTML、JavaScript简介 2.1、服务器与浏览器 2.2、HTML简介 2.2.1、HTML元素概览 2.2.2、创建...
1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发框架 1.6、本章摘要 1.7、开发实战讲解 第2章 HTML、JavaScript简介 2.1、服务器与浏览器 2.2、HTML简介 2.2.1、HTML元素概览 2.2.2、创建显示...