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是Java Web开发中用于实现文件上传的两个重要组件。Struts1.2是Apache的一个开源框架,主要用于构建MVC(模型-视图-控制器)架构的Web应用程序,而Commons-Fileupload则是Apache ...
在Java Web开发中,Struts1.x框架是一个广泛使用的MVC(Model-View-Controller)框架,它提供了处理用户请求、业务逻辑和视图展示的能力。在Struts1.x中,实现文件上传功能是一个常见的需求,特别是在处理用户提交的...
我们需要在项目中引入这个库,并在ActionForm或对应的业务逻辑中使用它。 3. **ActionForm与表单字段**: 创建一个ActionForm类,包含一个File类型的属性,对应HTML表单中的file输入字段。例如,可以有一个`...
在Struts的ActionForm或Action类中,我们需要使用`File`、`String`和`Integer`三个属性来接收上传的文件,同时配置Struts的配置文件以启用文件上传支持。 1. **配置Struts-config.xml**: 在`struts-config.xml`中...
List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); String filePath = "/uploads/" + fileName; // 服务器...
List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); // 处理文件保存逻辑 // ... } } } catch ...
然后,我们可以通过调用`ServletFileUpload.parseRequest(request)`来解析请求,这将返回一个`FileItemIterator`,我们可以遍历这个迭代器来获取每个上传的文件: ```java FileItemIterator iter = upload....
items = upload.parseRequest(request); } catch (FileUploadException e) { log.error("Failed to parse upload request", e); return mapping.findForward("error"); } for (FileItem item : items) { if ...
List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); // 处理文件保存逻辑 item.write(new File("保存路径...
List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); // 处理文件,如保存到服务器的某个目录 } } } //...
List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); File storeFile = new File("/path/to/save/files", ...
这通常包括创建一个DiskFileItemFactory实例,配置临时存储路径和大小限制,然后用它创建一个ServletFileUpload实例,最后调用parseRequest方法解析请求。 5. **文件处理**: 解析完成后,我们可以访问FileItem对象...
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 ...
List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); // 处理文件并保存到服务器 saveImageToFileSystem...
Struts 是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它在企业级开发中被广泛使用。文件上传是Web应用中常见的功能,例如用户需要上传图片、文档等。Struts 提供了方便的文件上传支持,...
这里我们将深入探讨两种实现Java文件上传的方法:基于Struts框架的上传和使用第三方库(如Apache Commons FileUpload)进行上传。 首先,我们来看基于Struts框架的文件上传。Struts是一个用于构建MVC(Model-View-...
List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); File storeFile = new File("/path/to/save/files", ...
List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); // 保存文件到服务器 File savedFile = new File(...
最后,别忘了在web.xml中配置Struts的前端控制器(ActionServlet)以及对应的过滤器,确保Struts能正确处理请求。 总结来说,Struts上传图片涉及以下几个步骤: 1. 在Struts配置文件中配置Action。 2. 创建处理文件...
在Struts的Action类中,你需要接收`ActionForm`实例,然后使用`Commons FileUpload`来解析请求并保存文件。以下是一个基本的示例: ```java public class UploadAction extends Action { public ActionForward ...