动态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(目标对象,源对象)方法进行对象值的复制。
相关推荐
在Struts中,文件上传和类型转换是两个重要的功能,它们允许用户上传文件并处理不同类型的数据。 文件上传是Web应用程序中常见的一种功能,允许用户通过表单提交本地文件到服务器。在Struts中,实现文件上传的关键...
我们可以通过自定义一个ActionForm类,包含一个FormFile类型的属性来处理文件上传。然后,在表单提交时,我们可以在`validate()`方法内检查文件大小。例如: ```java public class FileUploadForm extends ...
在IT行业中,Android和Tomcat之间的文件上传与数据交互是一个常见的需求,特别是在移动应用和服务器端数据处理的场景。在这个过程中,Android作为客户端,通过HTTP协议向运行在服务器上的Tomcat发送请求,实现文件的...
本教程将详细介绍如何在Struts中实现无中文乱码的文件上传与下载,并涵盖任意数量的文件上传。 首先,解决中文乱码问题的关键在于配置正确的字符编码。在Struts的配置文件`struts-config.xml`中,你需要为...
在Struts框架中,文件上传功能是通过`org.apache.struts.upload.FormFile`接口和相关的ActionForm类实现的。下面将详细介绍这个过程及其相关知识点。 1. **Struts框架**:Struts是一个开源的MVC(Model-View-...
3. **Struts2拦截器**:Struts2框架通过拦截器处理文件上传请求,它将文件内容转换为Action上下文的一部分,使得在Action类中可以直接访问上传的文件。 4. **Action类**:在Struts2中,Action类是业务逻辑的载体。...
1. **灵活性**:Struts 2的文件上传功能比Struts 1.x更强大,且与整个框架集成度高。而SmartUpload作为独立库,提供了更多自定义选项。 2. **易用性**:对于熟悉Struts的开发者来说,Struts 2的文件上传配置相对简单...
在处理文件上传功能时,这两个框架通常依赖于第三方库,如Apache Commons FileUpload和Apache Commons IO。以下是关于这两个库以及如何在Struts和Spring MVC中实现文件上传的详细说明。 **Apache Commons ...
在文件上传场景下,我们需要创建一个ActionForm子类,包含一个或多个类型为`java.io.File`或`org.apache.struts.upload.FormFile`的属性,用于存储上传的文件信息。 2. **MultipartRequestHandler**:Struts框架内...
在处理文件上传过程中,`commons-io`可能被用来进行文件的读取、转换或验证。 **在Struts1中的应用** Struts1是一个经典的MVC(模型-视图-控制器)框架,用于构建基于JSP和Servlet的Web应用。在Struts1中,处理文件...
在文件上传场景下,Struts提供了ActionForm来接收表单数据,包括上传的文件,然后通过Action类处理这些数据。Struts的配置文件(struts-config.xml)需要定义对应的Action,指定文件保存的路径以及处理上传的业务...
使用Commons FileUpload,开发者可以定义一个ActionForm,该表单包含一个FileItem类型的属性,然后在后端处理文件上传的逻辑。 具体实现步骤如下: 1. 首先,需要在Struts配置文件(struts-config.xml)中配置...
本文主要围绕Struts2的特性,尤其是与Struts1的区别,以及Struts2中的文件上传和下载功能进行深入讲解。 首先,Struts2的Action类设计与Struts1有很大不同。在Struts1中,Action类需要继承自Action类,而Struts2则...
Struts1依赖ment-beanutil包进行转换,而Struts2内建了转换器,提供更方便的类型自动转换。在视图支持方面,Struts2提供了丰富的视图技术,如JSP、FreeMarker等,使开发者可以选择更适合项目需求的技术。 关于文件...
本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序。SSH各框架的均为当前最新版本: •Struts 1.2 •Spring 1.2.5 •Hibernate 3.0 本文选用的数据库为Oracle 9i,当然你可以在不...
在这个"jsp关于struts的小项目"中,我们将深入探讨Struts的核心概念、配置以及如何与JSP(JavaServer Pages)协同工作,同时涉及类型转换、文件上传下载和国际化的实现。 1. **Struts框架基础**: Struts 1是...
在本篇文章中,我们将探讨几个关键的Struts应用技巧,包括如何利用Token解决重复提交问题、copyProperties的用法、文件上传的实现以及更多其他相关内容。 1. **利用Token解决重复提交** 在Web应用程序中,用户可能...
6. **测试与调试**:完成上述配置后,需要对整合后的系统进行充分的测试,确保编辑器能够正常显示和保存富文本内容,同时检查文件上传功能是否正常,特别是对于中文文件名的支持。 总的来说,Struts和FCKeditor的...
- **Commons-fileupload-1.2.1.jar**: 文件上传的支持库,用于处理HTTP请求中的文件上传。 **2. Eclipse配置** 对于Eclipse IDE而言,如果没有MyEclipse提供的Web支持,需要额外安装或配置commons-fileupload等...