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

struts1.2中ActionForm和ServletFileUpload.parseRequest(request)不能同时使用

 
阅读更多
struts1.2中ActionForm和ServletFileUpload.parseRequest(request)不能同时使用
.
分类: Struts2011-11-25 09:20583人阅读评论(0)收藏举报

一个问题。在back_add.jsp中把需要保存的内容放在"opinion"中,然后在action中获取的时候,用request.getParameter("opinion")可以正确获得值
但是用para.get("opinion")就死活取不到值,具体代码如下:

Map<String, String> para = new HashMap<String, String>();

request.setCharacterEncoding("UTF-8");

DiskFileItemFactory factory = new DiskFileItemFactory();

ServletFileUpload upload = new ServletFileUpload(factory);

try

{

List items = upload.parseRequest(request);

Iterator itr = items.iterator();

while (itr.hasNext())

{

FileItem item = (FileItem) itr.next();

if (item.isFormField())

{

para.put(item.getFieldName(), item.getString("UTF-8"));

}

else

{

if (item.getName() != null && !item.getName().equals(""))

{

int last = item.getName().lastIndexOf("\\");

String temString = item.getName().substring(last + 1)+ "/";

String read = item.getName().substring(last + 1);

String suffix = read.substring(read.lastIndexOf("."));

String uuid = java.util.UUID.randomUUID().toString();

temString = uuid + suffix + "*" + temString;

enclosure = enclosure + temString;

File tempFile = new File(item.getName());

File file = new File(servlet.getServletContext().getRealPath("/")+ "\\upload\\", uuid + suffix);

item.write(file);

}

}

}

}

catch (Exception e)

{

e.printStackTrace();

}

这部分代码还包含了对上传的附件的处理。到这里,要用para.get("opinion")就会报空指针异常。

一直没想通,在网上也没搜到满意的解决办法,把用到的方法都拆开看了,也没看出什么不妥,一句一句的测试,到upload还貌似正确,但是items怎么都为空……

今天终于在网上看到一个哥们儿答到点子上了~




原来,ActionForm和ServletFileUpload.parseRequest(request)是不能同时使用的!!!!!!!!!!!!




网上匿名高人是这么解释的:

解释struts用ActionForm的方式处理上传附件的一些问题,struts接收到enctype="multipart/form-data"的post请求后,会看那个对应的action有没有配置actionform,如果配置了,就会作一些处理,所以你在action里得到的request已经不是一个普通的request了,而是一个被封装过的request。如果想得到原始的request,就不要struts-config.xml里给action类配置actionform。
ServletFileUpload.parseRequest(request)中的request用的是普通的request,而使用actionForm时request被封装,从而导致ServletFileUpload.parseRequest(request)取不到值,为空。目前来说,无法解决ActionForm和ServletFileUpload.parseRequest(request)共存问题,那只能换别的上传方式了!

引用自:http://zhidao.baidu.com/question/196663366.html?fr=qrl&cid=870&index=5
分享到:
评论

相关推荐

    struts1.2和commons-fileupload实现文件上传

    Struts1.2和Commons-Fileupload是Java Web开发中用于实现文件上传的两个重要组件。Struts1.2是Apache的一个开源框架,主要用于构建MVC(模型-视图-控制器)架构的Web应用程序,而Commons-Fileupload则是Apache ...

    使用struts1.x上传多个文件的一中方法

    在Java Web开发中,Struts1.x框架是一个广泛使用的MVC(Model-View-Controller)框架,它提供了处理用户请求、业务逻辑和视图展示的能力。在Struts1.x中,实现文件上传功能是一个常见的需求,特别是在处理用户提交的...

    struts中的文件上传

    我们需要在项目中引入这个库,并在ActionForm或对应的业务逻辑中使用它。 3. **ActionForm与表单字段**: 创建一个ActionForm类,包含一个File类型的属性,对应HTML表单中的file输入字段。例如,可以有一个`...

    Struts上传,已经处理好乱码问题

    在Struts的ActionForm或Action类中,我们需要使用`File`、`String`和`Integer`三个属性来接收上传的文件,同时配置Struts的配置文件以启用文件上传支持。 1. **配置Struts-config.xml**: 在`struts-config.xml`中...

    上传到服务器例子[用struts_MVC]

    List&lt;FileItem&gt; items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); String filePath = "/uploads/" + fileName; // 服务器...

    文件上传struts

    List&lt;FileItem&gt; items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); // 处理文件保存逻辑 // ... } } } catch ...

    java文件上传--fileupload

    然后,我们可以通过调用`ServletFileUpload.parseRequest(request)`来解析请求,这将返回一个`FileItemIterator`,我们可以遍历这个迭代器来获取每个上传的文件: ```java FileItemIterator iter = upload....

    struts框架文件上传

    items = upload.parseRequest(request); } catch (FileUploadException e) { log.error("Failed to parse upload request", e); return mapping.findForward("error"); } for (FileItem item : items) { if ...

    51CTO下载-FileUploadStruts

    List&lt;FileItem&gt; items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); // 处理文件保存逻辑 item.write(new File("保存路径...

    struts文件上传

    List&lt;FileItem&gt; items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); // 处理文件,如保存到服务器的某个目录 } } } //...

    struts实现多文件上传

    List&lt;FileItem&gt; items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); File storeFile = new File("/path/to/save/files", ...

    struts上传.rar

    这通常包括创建一个DiskFileItemFactory实例,配置临时存储路径和大小限制,然后用它创建一个ServletFileUpload实例,最后调用parseRequest方法解析请求。 5. **文件处理**: 解析完成后,我们可以访问FileItem对象...

    java+jsp上传文件

    FileItem item = upload.parseRequest(request).get(0); String fileName = item.getName(); File storeFile = new File("/path/to/your/upload/directory/" + fileName); item.write(storeFile); return ...

    struts的图片上传的实现

    List&lt;FileItem&gt; items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); // 处理文件并保存到服务器 saveImageToFileSystem...

    struts实现文件上传

    Struts 是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它在企业级开发中被广泛使用。文件上传是Web应用中常见的功能,例如用户需要上传图片、文档等。Struts 提供了方便的文件上传支持,...

    java实现文件上传

    这里我们将深入探讨两种实现Java文件上传的方法:基于Struts框架的上传和使用第三方库(如Apache Commons FileUpload)进行上传。 首先,我们来看基于Struts框架的文件上传。Struts是一个用于构建MVC(Model-View-...

    struts文件上传例子

    List&lt;FileItem&gt; items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); File storeFile = new File("/path/to/save/files", ...

    struts1文件上传

    List&lt;FileItem&gt; items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); // 保存文件到服务器 File savedFile = new File(...

    Struts上传图片操作

    最后,别忘了在web.xml中配置Struts的前端控制器(ActionServlet)以及对应的过滤器,确保Struts能正确处理请求。 总结来说,Struts上传图片涉及以下几个步骤: 1. 在Struts配置文件中配置Action。 2. 创建处理文件...

    struts可上传多个文件

    在Struts的Action类中,你需要接收`ActionForm`实例,然后使用`Commons FileUpload`来解析请求并保存文件。以下是一个基本的示例: ```java public class UploadAction extends Action { public ActionForward ...

Global site tag (gtag.js) - Google Analytics