`
阅读更多

    在J2EE中,绝大部分客户端的数据都是通过表单提交到服务器端,而关于表单数据的收集,都是由Struts核心控制器ActionServlet完成的,它是通过标准的JavaBean命名规范来将表单数据封装在ActionForm中;

         ActionForm用于封装用户的请求参数,而请求参数是通过JSP页面的表单域传递过来的,因此要保证ActionForm的参数属性与表单域的名字相同,注意ActionServlet并不是通过ActionForm中的私有属性的名称来进行封装注值,因为这个私有属性对外部属性是不可见的。因此ActionServlet是通过对应额settergetter方法来封装注值的

 

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没有各属性的gettersetter因此无法调用对应的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请求参数必须使用DynaActionFormgetter方法获取有如下三种;

    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:

              ValidatorActionFormDynaValidatorActionForm也都是在使用验证框架时使用DynaValidatorFormValidatorForm不同的是在配置validtion.xml<form name=path> name使用的是actionpath属性值。以此来区分不同请求的验证规则。

 

.还有一种特殊的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、可以支持验证

 

 

 

  • 大小: 153.9 KB
分享到:
评论

相关推荐

    Struts1.3 备忘笔记

    Struts 1.3 备忘笔记 【资源特点】 1、以项目形式组织,包含所有的源代码 2、内含详细的注释说明 3、知识点较全面 【内容目录】 01 Struts_01HandworkApply : 手工配置Struct应用程序,演示用户提交数据后服务器的...

    Struts框架及标记库

    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 ...

    structs程序设计从入门到精通word文档

    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...

    Struts2 in action中文版

    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 ...

    Struts中文手册[文字版][中文]

    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. ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    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...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    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...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    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...

    J2EE电子商务系统开发从入门到精通

    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...

    从Java走向Java+EE+.rar

    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 什么是容器 ...

    JAVA程序开发大全---上半部分

    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 ...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    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...

    java web 视频、电子书、源码(李兴华老师出版)

    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、创建...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    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、创建显示...

    MLDN+李兴华+Java+Web开发实战经典.part3.rar )

    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、创建...

    李兴华 java_web开发实战经典 源码 完整版收集共享

    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、创建显示...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 下

    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、创建显示...

    李兴华Java Web开发实战经典.pdf (高清版) Part1

    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、创建...

    李兴华 Java Web 开发实战经典 高清扫描版Part3

    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、创建显示...

Global site tag (gtag.js) - Google Analytics