`
summer_021
  • 浏览: 57948 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Struts1_学习笔记6_struts0500_actionform_动态ActionForm_转换器

 
阅读更多
1、动态ActionForm
    动态ActionForm是为了避免标准ActionForm膨胀而设计的,使用动态ActionForm可以获得标准ActionForm的所有功能
   * 在struts-config.xml文件中定义动态ActionForm,如:

<!-- 动态ActionForm 不用自己写ActionForm类了,这里配置。
			动态ActionForm可以用动态验证框架
			手写的ActionForm可以用validate方法
		-->
		<form-bean name="dynaForm" type="org.apache.struts.action.DynaActionForm">
			<form-property name="username" type="java.lang.String"/>
			<form-property name="age" type="java.lang.Integer"/>
		</form-bean>


      *在Action中使用动态ActionForm
DynaActionForm daf = (DynaActionForm)form;
		String username = (String)daf.get("username");
		Integer age = (Integer)daf.get("age");


动态ActionForm其实是把页面中的html元素的名字和值放到了map中,所以通过get方法可以取出相应的值
动态ActionForm采用EL表达式的输出方式,${dynabean.map.prop}
动态Action的验证,通常使用动态验证框架validator

2、采用struts上传文件
* 页面的配置,如:
<form action="upload.do" method="post" enctype="multipart/form-data">
  标题:<input type="text" name="title"><br>
  文件:<input type="file" name="myfile"><br>
  <input type="submit" value="提交">
  </form>
* ActionForm中使用FormFile来接收上传的文件,参见:具体代码
* 在Action中调用FormFile取得上传文件数据,采用流输出,即完成上传,详见代码。
* 采用<controller/>标签配置上传参数,如:<controller maxFileSize="10M"/>

3、空字段测试
* 在表单中没有input输入域,jsp脚本接收到的值为null,el表达式接收到的值为空串
* 如果表单中的值,没有输入,那么jsp脚本和el表达式接收到的值都为空串

4、测试ActionForm类型的自动转换
* boolean:yes,1,on,true都会转换成True类型,而且忽略大小写,其他情况转换成false
* Date类型的转换:
* 如果是java.sql.Date,页面日期的格式必须为yyyy-mm-dd,才可以转换
* 如果是java.util.Date,默认情况下struts无法转换

* 自定义转换器的实现步骤
* 实现converter接口,实现convert方法
* 将实现的conerter注册,通常情况采用servlet注册
* 采用servlet注册需要注意标签的配置,<load-on-startup>3</load-on-startup>(也可以采用struts plugin注册)


Servlet方式注册:
1、具体注册的Servlet:
/**
 * 注册java.util.date转换器
 * @author Administrator
 *
 */
public class UtilDateConverterInitWithServlet extends HttpServlet {
	@Override
	public void init() throws ServletException {
		//将UtilDateConverter注册到ConvertUtils里面
		ConvertUtils.register(new UtilDateConverter(), Date.class);
	}
}


2、具体的转换类:
public class UtilDateConverter implements Converter {

	public Object convert(Class type, Object value) {
		System.out.println("UtilDateConverter.value=" + value);
		if (value == null) {
			return value;
		}
		if (value instanceof Date) {
			return value;
		}
		Date d = null;
		if (value instanceof String) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			try {
				d = sdf.parse((String) value);
			} catch (ParseException e) {
				e.printStackTrace();
			}
		}
		return d;
	}
}



3、加载Servlet注册类
 <!-- load-on-startup:大于0就可以了 3也可以. 表示tomcat一启动就执行这个Servlet 
  <servlet>
  	<servlet-name>UtilDateConverterInitWithServlet</servlet-name>
  	<servlet-class>com.aowin.struts.UtilDateConverterInitWithServlet</servlet-class>
  	<load-on-startup>3</load-on-startup>
  </servlet>
   -->  



PlugIn方式注册:
1、注册类
public class UtilDateConverterInitWithPlugin implements PlugIn {

	public void destroy() {
	}

	public void init(ActionServlet servlet, ModuleConfig config)
			throws ServletException {
		System.out.println("UtilDateConverterInitWithPlugin.init()");
		ConvertUtils.register(new UtilDateConverter(), Date.class);
	}
}



2、转换器:同Servelt注册的转换器

3、加载注册类:
在Struts1配置文件中:
<!-- 第二种注册转换器方式  plug方式 -->
	<plug-in className="com.aowin.struts.UtilDateConverterInitWithPlugin"/>



Struts对ActionForm的自动搜集过程:
  * 将页面数据放到map中,其中map中的key为页面中的名称,map中的value为页面中的value值
  * 调用BeanUtils.setProperties方法,将map中的值逐个设置到ActionForm实例上,对于ActionForm中的每个属性
    根据类型调用相应的Converter,然后调用相应的convert方法,将相应的字符串转换成ActionForm中指定的类型
   
小技巧:可以通过BeanUtils.copyProperties(目标对象,源对象)方法进行对象值的复制。
分享到:
评论

相关推荐

    struts2学习笔记(完美总结)——转自OPEN经验库

    在实际项目中,Struts2可以处理类型转换、文件上传下载、拦截器(Interceptor)防止重复提交等问题。Interceptor是Struts2中的重要特性,它允许在Action执行前后插入额外的处理逻辑,如登录验证、日志记录等。深入...

    struts2学习笔记

    ### Struts2学习笔记知识点详解 #### 一、基础知识 **1. Struts2核心组件** - **XWork-2.0.5.jar**: 引入WebWork框架的核心功能,这是Struts2的一个重要组成部分,提供了请求处理的核心逻辑。 - **Commons-...

    Struts、Spring、Hibernate&Ajax;学习笔记总结

    ### Struts、Spring、Hibernate&Ajax 学习笔记总结 #### Struts 部分 **Struts** 是 Java 开源框架中最早出现且最具影响力的框架之一,它出自 Apache 组织,是 Java Web 应用开发的标准之一。Struts 以 MVC(Model...

    Struts学习笔记

    此外,开发者还可以自定义类型转换器,通过实现Converter接口并注册到Struts配置中,以处理特定类型的转换需求。 四、JFreeChart使用 JFreeChart是一个用于生成图表的Java库,它在Struts应用中常用于生成动态报表和...

    struts学习笔记

    5. **创建视图(JSP页面)**:使用Struts提供的标签库和ActionForm来创建动态的用户界面。 6. **部署应用**:将应用部署到服务器,验证Struts是否能够正确处理请求并显示预期的结果。 Struts框架的使用能够提高...

    struts自学笔记

    - Struts2的OGNL负责类型转换,并提供了内置的转换器,支持多种基本类型和自定义类型。 6. **验证机制**: - Struts1的验证可以通过ActionForm的validate方法或Validator扩展来实现。 - Struts2支持validate方法...

    web学习笔记.pdf

    Web技术的学习笔记涵盖了从基础的JSP引擎工作原理到高级的框架如Struts1和Struts2的使用。首先,JSP(JavaServer Pages)是Java平台上的动态网页技术,当Web容器接收到以JSP为扩展名的URL请求时,会交由JSP引擎处理...

    struts入门笔记

    - **Struts1 vs Struts2**:Struts2 更加灵活,支持更多拦截器(Interceptors),提供了更强大的类型转换和异常处理。 通过深入理解 Struts 的核心概念和组件,结合实践中的具体案例,开发者可以更有效地构建稳定...

    留言管理程序_使用Struts + DAO + Hibernate完成笔记.zip

    【描述】:该程序的开发过程中,Struts作为前端控制器,负责接收用户的请求并转发给相应的业务逻辑组件。DAO层则作为数据访问层,用于与数据库进行交互,通过Hibernate框架将Java对象与数据库表进行映射,简化了...

    lego2学习手册 ( LEGO框架学习笔记)

    5. **视图层开发**:使用Struts框架进行JSP页面、ActionForm bean、Action等的开发,同时配置流程控制,确保用户界面与后端逻辑的协调。 6. **应用安全配置**:在`struts_config.xml`, `fwk.xml`以及JSP页面中设置...

    J2EE相关技术知识学习笔记

    Struts是一个MVC(Model-View-Controller)框架,它定义了Action和ActionForm(JavaBean)来处理用户请求,Interceptor(拦截器)则可以实现更复杂的业务逻辑处理。JSP和Servlet结合Struts,可以更好地实现业务逻辑...

    java知识点汇总学习路线与笔记

    ### Java知识点汇总学习路线与笔记 #### 一、J2SE **面向对象**是Java的核心,主要包括**封装**、**继承**、**多态**三个特性。通过封装,可以隐藏对象的内部实现细节;继承使得类之间的代码复用成为可能;而多态则...

    sturts+hibernate+spring

    ### Struts + Hibernate + Spring 技术整合学习笔记 #### 一、技术整合概述与应用场景 在企业级应用开发中,Struts + Hibernate + Spring(简称SSH)是一种非常流行的组合方式,它们各自承担着不同的角色,共同...

    达内笔记(基础性,很有价值)

    Struts1.x采用配置文件定义动作映射,而Struts2则提供了更灵活的注解配置和拦截器机制。 【Hibernate】:Hibernate是一个对象关系映射(ORM)框架,它允许Java开发者以面向对象的方式来操作数据库。通过XML或注解...

Global site tag (gtag.js) - Google Analytics