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
分享到:
相关推荐
视频第二部分 下载前请阅读博客文章详细 博文链接:https://dlivan.iteye.com/blog/65870
一个Jsp两个ActionForm分别提交.rar一个Jsp两个ActionForm分别提交.rar一个Jsp两个ActionForm分别提交.rar一个Jsp两个ActionForm分别提交.rar一个Jsp两个ActionForm分别提交.rar
struts1使用actionform实现表单验证,表单验证失败追加信息。
structs in action中文完全版\5. 用ActionForm 传递数据.pdf
1.2. Struts 体系结构1 1.2.1. 模型.2 1.2.2. 视窗.2 1.2.3. 控制器.2 1.3. Struts 框架中的组件.3 1.3.1. Struts配置文件.3 1.4. ActionServlet类6 1.4.1. ActionServlet配置6 1.4.2. ActionServlet方法7 1.5. ...
Struts中不同的Action和ActionForm组合.rar
import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.actions.DispatchAction等缺少
该avi很好的讲解动态actionForm,通过练习可以理解它的运行过程
主要是actionForm的基本验证,重写validate方法,返回actionErrors,然后根据资源文件显示错误。 这是一个demo例子,直接导入eclispe中即可。 并且这部分内容会在相应的博客中介绍,稍后会更新博客。
struts提供了标签来显示整个ActionErrors的错误信息。但要在struts-config.xml中设置<action ...
05.struts中的Forms 06.struts:介绍ActionForm 07.分离Book和BookForm的一个好方法 08.处理Invalid Entries 09.Recapitualation: Where we are 10.使用logic 11.Templates 12.FAQ 13.Beans to XML 14....