报错的代码:
private List<java.io.File> file;
private List<String> fileFileName;
private List<String> fileContentType;
public List<java.io.File> getFile() {
return file;
}
public void setFile(List<java.io.File> file) {
this.file = file;
}
public List<String> getFileFileName() {
return fileFileName;
}
public void setFileFileName(List<String> fileFileName) {
this.fileFileName = fileFileName;
}
public List<String> getFileContentType() {
return fileContentType;
}
public void setFileContentType(List<String> fileContentType) {
this.fileContentType = fileContentType;
}
后台错误:
ognl.MethodFailedException: Method "setFileContentType" failed for object
com.bjsxt.action.UploadAction@ee25db [java.lang.NoSuchMethodException: setFileContentType([Ljava.lang.String;)
]
java.lang.NoSuchMethodException: setFileContentType([Ljava.lang.String;)
警告: Error setting value
ognl.MethodFailedException: Method "setFileFileName" failed for object
com.bjsxt.action.UploadAction@ee25db [java.lang.NoSuchMethodException: setFileFileName([Ljava.lang.String;)
]
java.lang.NoSuchMethodException: setFileFileName([Ljava.lang.String;)
分析&解决
:
Struts2的类型转换是一个非常灵活和好用的功能,Struts2的文件上传也已经简化到了极致。对Struts2
的学习也已经有了一段时间了,Struts2的确很好用,但是他的学习成本却比Struts1高,尤其是对于没有WebWork经验的人。Struts2的理念非常好,继承了Spring的POJO理念,但是由于Struts2封装的太过完美,会导致程序员迷失方向。
这两天在做Struts2的多文件上传,一直遇到一个错误说是xxxFileName和xxxContentType类型转换错误,当我将它该为单文件上传时,却一点没有问题,我知道问题是出在了类型转换错误上,但始终找不到根源的所在,我使用了泛型的List,这个转换不是自动发生的吗,为什么还会报这个错误的呢,找了好久才发现原来我在全局的转换配置文件中注册了如下的全局类型转换器:
java.util.List=com.bettersoft.converter.MyConverter
我将它去掉之后,重新部署运行,成功了。
果然是全局类型转换在作怪,虽然问题解决了,但我觉得这是Struts2的一个bug,类型转换应该在需要转换的时候发生,当我使用了泛型的时候,我觉得全局的类型转换不应该发生。当然这与我的程序也有关系,不应该将集合类型的转换器注册为全局类型转换器。而且在JDK5的情况下,应该尽量使用泛型机制,而不要过分的依赖Strust2的类型转换。
Struts2的学习还在继续,我觉得学习它关键是它的理念,如拦截器,POJO编程思想,输入校验和类型转换。
分享到:
相关推荐
这个压缩包“struts2 全局类型转换器.rar”可能包含了一个示例或教程,教你如何在Struts2中实现全局类型转换器,以统一处理不同类型的字段转换。在Struts2中,类型转换器扮演着重要的角色,它允许你将用户输入的数据...
在Struts2中,文件上传功能是一个常用特性,尤其在处理用户提交的多个文件时。本文将详细讲解如何使用Struts2进行多个文件的上传,重点是使用List集合进行上传。 首先,要实现Struts2的文件上传,必须引入必要的...
Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括MVC设计模式的实现、类型转换、国际化、拦截器等。在本篇“Struts2学习笔记三”中,我们将聚焦于Struts2的类型转换这一核心特性。类型转换在处理...
本篇文章将详细探讨如何在Struts2框架下实现文件的上传与下载。 首先,我们需要了解Struts2中的文件上传机制。Struts2提供了`FileUploadInterceptor`拦截器来处理文件上传请求。在处理文件上传时,开发者需要在...
在Struts2中,全局转换器(Global Converters)是一个关键特性,它允许开发者为整个应用定义统一的数据类型转换规则,而不是在每个Action类中单独配置。这个特性大大提高了代码的复用性和维护性。 标题“Struts2...
2. **设置Struts2配置**:配置文件需要指定允许上传的文件大小、类型等。例如,使用`<constant>`标签设置`struts.multipart.parser`为`jakarta`,以启用`Commons FileUpload`。 3. **编写Action类**:在Action类中...
3. **创建Struts2 Action**:在Struts2框架中,创建一个处理文件上传的Action类,该类通常会包含一个`List<HttpServletFileWrapper>`类型的属性,用于接收上传的文件。 4. **编写Struts2配置**:在struts.xml配置...
Struts2框架是Java Web开发中的一个流行MVC(Model-View-Controller)框架,它提供了丰富的功能,包括处理表单提交、文件上传等。在Struts2中,文件上传是一个常见的需求,可以帮助用户从客户端上传文件到服务器。...
这篇博客“Struts2数据类型转换器”可能深入探讨了这个主题,虽然具体的细节无法在此给出,但我们可以根据Struts2中数据类型转换的工作原理来展开讨论。 在Java Web开发中,用户通过表单提交的数据通常是字符串形式...
理解并掌握如何利用内置转换器、自定义转换器以及处理转换错误,对于构建高效、稳定的Struts2应用至关重要。通过深入学习Struts2的源码和使用相关工具,我们可以更深入地了解这些机制,并优化我们的应用程序。
在Struts2的配置文件(通常是struts.xml)中,你需要为你的Action添加一个或多个action配置,指定处理文件上传的result类型。Struts2提供了一个特殊的`stream`结果类型,用于处理文件上传: ```xml ...
在本项目中,"struts2多文件的上传"实现了用户一次性上传多个文件的能力。 要理解这个功能,首先我们需要了解Struts2中的Action类和Interceptor(拦截器)。Action类是处理用户请求的核心,而Interceptor则用于处理...
Struts2 文件上传时遇到“类型不允许的问题”通常与文件扩展名验证有关,这涉及到Struts2框架的安全配置。在Struts2中,为了防止恶意用户上传不安全的文件(如脚本或可执行文件),系统会设定允许上传的文件类型。当...
需求 1.能够对多个文件进行上传(可以选择上传文件个数,也即上传文件个数不定) 2.能够对上传路径进行配置文件指定(upload.properties),使用...多文件 上传 下载 随意文件 java Struts2 单例 配置 动态读取 李顺利
Struts2提供了完善的文件上传支持,让我们来详细探讨如何在Struts2中实现多文件上传。 首先,我们需要在Struts2的配置文件(struts.xml)中启用文件上传的支持。这通常涉及到添加`<constant>`标签来设置`struts....
在Struts2的配置文件中,我们可以定义这些规则,例如限制上传文件的大小,只接受特定类型的文件(如图片、文档等)。此外,我们还需要关注安全问题,防止恶意文件上传。 文件上传的实现通常包括以下几个步骤: 1. ...
通过以上步骤,你可以在Struts2应用中有效地处理类型转换错误,尤其是时间转换错误,提高用户体验,并防止因为这类错误导致的程序崩溃。这需要对Struts2的配置、拦截器机制以及异常处理有深入理解。
在Action类中,你需要定义一个或多个属性来接收上传的文件,并设置相应的注解来告知Struts2如何处理它们。 在Action类中,你可以使用`File` 或 `FileItem` 对象来接收文件。`FileItem` 是Apache Commons FileUpload...
然后,通过在Action类或者全局配置文件(struts.xml)中注册这个转换器,使其能够在特定场景下被Struts2框架调用。 在Struts2的类型转换过程中,有以下步骤: 1. Struts2会查找与Action属性类型匹配的内置类型转换...
2. **配置转换器**:为了让Struts2知道何时使用自定义的转换器,我们需要在配置文件(通常是struts.xml)中进行声明。可以使用`<conversion-property>`标签来指定转换器应用于哪个字段,或者全局注册转换器。 ```...