`
foryougeljh
  • 浏览: 116510 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

动态ActionForm,文件上传与转换器

 
阅读更多

动态ActionForm

动态ActionForm是为了避免标准ActionForm膨胀而设计的,使用动态ActionForm可以获得标准ActionForm的所有功能,动态ActionForm(DynaActionForm)继承ActionForm

*在struts-config.xml文件中定义动态ActionForm,如:

<form-beans>

<form-beanname="dynaForm"type="org.apache.struts.action.DynaActionForm">

<form-propertyname="username"type="java.lang.String"/>

<form-propertyname="age"type="java.lang.Integer"/>

</form-bean>

</form-beans>

*在Action中使用动态ActionForm

DynaActionFormdaf=(DynaActionForm)form;

Stringusername=(String)daf.get("username");

Integerage=(Integer)daf.get("age");

动态ActionForm其实是把页面中的html元素的名字和值放到了map中,所以通过get方法可以取出相应的值

动态ActionForm采用EL表达式的输出方式,${dynabean.map.prop},

原因:DynaActionForm无getDynaValues()方法,只有getMap()方法。采用el表达式导航时要使用map来导航。

protectedHashMapdynaValues=newHashMap();

publicMapgetMap(){

return(dynaValues);

}

动态Action的验证,通常使用动态验证框架validator

采用struts上传文件

*页面的配置,如:

<formaction="upload.do"method="post"enctype="multipart/form-data">

标题:<inputtype="text"name="title"><br>

文件:<inputtype="file"name="myfile"><br>

<inputtype="submit"value="提交">

</form>

*ActionForm中使用FormFile来接收上传的文件,参见:UploadActionForm.java

*在Action中调用FormFile取得上传文件数据,采用流输出,即完成上传

UploadActionForm uaf = (UploadActionForm)form;
FormFile myFile = uaf.getMyfile();
if (myFile != null) {

FileOutputStream fos = new FileOutputStream("c://" + myFile.getFileName());
fos.write(myFile.getFileData());
fos.flush();
fos.close();
}

*采用<controller/>标签配置上传参数,如:<controllermaxFileSize="10M"/>

空字段测试

*在表单中没有input输入域,jsp脚本接收到的值为null,el表达式接收到的值为空串

*如果表单中的值,没有输入,那么jsp脚本和el表达式接收到的值都为空串

测试ActionForm类型的自动转换

*boolean:yes,1,on,true都会转换成True类型,而且忽略大小写,其他情况转换成false

*Date类型的转换:

*如果是java.sql.Date,页面日期的格式必须为yyyy-mm-dd,才可以转换

*如果是java.util.Date,默认情况下struts无法转换

自定义转换器的实现步骤

*实现converter接口,实现convert方法

如:

public class UtilDateConverter implements Converter {

public Object convert(Class type, Object 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;
}

}

*将实现的conerter注册,通常情况采用servlet注册

*采用servlet注册需要注意标签的配置,<load-on-startup>10</load-on-startup>

如:

public class UtilDateConverterInitWithServlet extends HttpServlet {

@Override
public void init() throws ServletException {
ConvertUtils.register(new UtilDateConverter(), Date.class);//注册自定义转化器
}

}

web.xml

<servlet>
<servlet-name>UtilDateConverterInitWithServlet</servlet-name>
<servlet-class>com.bjsxt.struts.UtilDateConverterInitWithServlet</servlet-class>
<load-on-startup>10</load-on-startup>
</servlet>

采用strutsplugin注册

struts-config.xml加入

<plug-in className="com.bjsxt.struts.UtilDateConverterInitWithPlugin"/>

public class UtilDateConverterInitWithPlugin implements PlugIn {

public void destroy() {
}

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

Struts对ActionForm的自动搜集过程:

*将页面数据放到map中,其中map中的key为页面中的名称,map中的value为页面中的value值

*调用BeanUtils.setProperties方法,将map中的值逐个设置到ActionForm实例上,对于ActionForm中的每个属性

根据类型调用相应的Converter,然后调用相应的convert方法,将相应的字符串转换成ActionForm中指定的类型

可以通过BeanUtils.copyProperties(目标对象,源对象)方法进行对象值的复制。

<!--EndFragment-->
分享到:
评论

相关推荐

    struts的[图片]文件上传和类型转换

    在Struts中,文件上传和类型转换是两个重要的功能,它们允许用户上传文件并处理不同类型的数据。 文件上传是Web应用程序中常见的一种功能,允许用户通过表单提交本地文件到服务器。在Struts中,实现文件上传的关键...

    控制上传的文件的大小

    我们可以通过自定义一个ActionForm类,包含一个FormFile类型的属性来处理文件上传。然后,在表单提交时,我们可以在`validate()`方法内检查文件大小。例如: ```java public class FileUploadForm extends ...

    android和tomcat文件上传和数据交互

    在IT行业中,Android和Tomcat之间的文件上传与数据交互是一个常见的需求,特别是在移动应用和服务器端数据处理的场景。在这个过程中,Android作为客户端,通过HTTP协议向运行在服务器上的Tomcat发送请求,实现文件的...

    无中文乱码的Struts上传下载(任意文件上传)

    本教程将详细介绍如何在Struts中实现无中文乱码的文件上传与下载,并涵盖任意数量的文件上传。 首先,解决中文乱码问题的关键在于配置正确的字符编码。在Struts的配置文件`struts-config.xml`中,你需要为...

    struts文件上传

    在Struts框架中,文件上传功能是通过`org.apache.struts.upload.FormFile`接口和相关的ActionForm类实现的。下面将详细介绍这个过程及其相关知识点。 1. **Struts框架**:Struts是一个开源的MVC(Model-View-...

    struts2文件上传文件的小实例

    3. **Struts2拦截器**:Struts2框架通过拦截器处理文件上传请求,它将文件内容转换为Action上下文的一部分,使得在Action类中可以直接访问上传的文件。 4. **Action类**:在Struts2中,Action类是业务逻辑的载体。...

    struts 上传 和 smartupload上传

    1. **灵活性**:Struts 2的文件上传功能比Struts 1.x更强大,且与整个框架集成度高。而SmartUpload作为独立库,提供了更多自定义选项。 2. **易用性**:对于熟悉Struts的开发者来说,Struts 2的文件上传配置相对简单...

    struts,springMVC 上传文件需要的jar包 commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar

    在处理文件上传功能时,这两个框架通常依赖于第三方库,如Apache Commons FileUpload和Apache Commons IO。以下是关于这两个库以及如何在Struts和Spring MVC中实现文件上传的详细说明。 **Apache Commons ...

    struts项目源代码

    在文件上传场景下,我们需要创建一个ActionForm子类,包含一个或多个类型为`java.io.File`或`org.apache.struts.upload.FormFile`的属性,用于存储上传的文件信息。 2. **MultipartRequestHandler**:Struts框架内...

    commons-fileupload-1.2.jar和commons-io-1.3.2.jar

    在处理文件上传过程中,`commons-io`可能被用来进行文件的读取、转换或验证。 **在Struts1中的应用** Struts1是一个经典的MVC(模型-视图-控制器)框架,用于构建基于JSP和Servlet的Web应用。在Struts1中,处理文件...

    Struts+Spring+Hibernate_upload_and_download.rar_Spring+Hibernate

    在文件上传场景下,Struts提供了ActionForm来接收表单数据,包括上传的文件,然后通过Action类处理这些数据。Struts的配置文件(struts-config.xml)需要定义对应的Action,指定文件保存的路径以及处理上传的业务...

    commons-fileupload-1.2.1-bin 和 commons-io-1.4-bin.zip

    使用Commons FileUpload,开发者可以定义一个ActionForm,该表单包含一个FileItem类型的属性,然后在后端处理文件上传的逻辑。 具体实现步骤如下: 1. 首先,需要在Struts配置文件(struts-config.xml)中配置...

    sshb笔记复习

    本文主要围绕Struts2的特性,尤其是与Struts1的区别,以及Struts2中的文件上传和下载功能进行深入讲解。 首先,Struts2的Action类设计与Struts1有很大不同。在Struts1中,Action类需要继承自Action类,而Struts2则...

    sshb笔记(注释)复习.doc

    Struts1依赖ment-beanutil包进行转换,而Struts2内建了转换器,提供更方便的类型自动转换。在视图支持方面,Struts2提供了丰富的视图技术,如JSP、FreeMarker等,使开发者可以选择更适合项目需求的技术。 关于文件...

    ssh(structs,spring,hibernate)框架中的上传下载

     本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序。SSH各框架的均为当前最新版本:  •Struts 1.2  •Spring 1.2.5  •Hibernate 3.0  本文选用的数据库为Oracle 9i,当然你可以在不...

    jsp关于struts的小项目

    在这个"jsp关于struts的小项目"中,我们将深入探讨Struts的核心概念、配置以及如何与JSP(JavaServer Pages)协同工作,同时涉及类型转换、文件上传下载和国际化的实现。 1. **Struts框架基础**: Struts 1是...

    Struts应用技巧

    在本篇文章中,我们将探讨几个关键的Struts应用技巧,包括如何利用Token解决重复提交问题、copyProperties的用法、文件上传的实现以及更多其他相关内容。 1. **利用Token解决重复提交** 在Web应用程序中,用户可能...

    struts和fckeditor整合完整版

    6. **测试与调试**:完成上述配置后,需要对整合后的系统进行充分的测试,确保编辑器能够正常显示和保存富文本内容,同时检查文件上传功能是否正常,特别是对于中文文件名的支持。 总的来说,Struts和FCKeditor的...

    struts2学习笔记

    - **Commons-fileupload-1.2.1.jar**: 文件上传的支持库,用于处理HTTP请求中的文件上传。 **2. Eclipse配置** 对于Eclipse IDE而言,如果没有MyEclipse提供的Web支持,需要额外安装或配置commons-fileupload等...

Global site tag (gtag.js) - Google Analytics