首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

Struts 2上传文件和表单数据冲突,该怎么处理

2012-02-09 
Struts 2上传文件和表单数据冲突各位大神,我今天在写一个工程,是用了Struts+Hibernate的。现在遇到了问题。

Struts 2上传文件和表单数据冲突
各位大神,我今天在写一个工程,是用了Struts+Hibernate的。现在遇到了问题。
在一个JSP页面中,我要传一个课程号,还有上传目录,课程号有的是hidden标签。但是,一直出错。
代码很短的,如下:
<struts:form action="ReleaseHomework" enctype="multipart/form-data" method="post">
  <struts:textarea name="homeworktitle" label="请输入作业题目"></struts:textarea>
  <fck:editor instanceName="homeworkcontent">请输入作业内容</fck:editor>
  <struts:file name="homeworkfile" label="请选择文件"></struts:file>
  <struts:hidden name="courseid" value="%{#request.courseid}"></struts:hidden>
  <struts:submit value="发布作业" method="ReleaseHomework"></struts:submit>
  </struts:form>

这里面,传递Action时,有courseid读不到值,一直是null。
我调试了一下,发现是这句话的问题,enctype="multipart/form-data"
但是,不加上这句话,一直不能上传文件,加上这句话,就拿不到courseid的值,我2个都要,不知道怎么办。跪求各位大神帮忙啊。偶感激不尽啊。

[解决办法]


enctype属性有三种:
一:
application/x-www.form-urlencoded:默认编码方式。只会处理表单域力的value属性,该方式会将表单域的值处理成URL编码方式。但是不能处理上传文件的。编码是iso-8859-1
二:
enctype="multipart/form-data"这种编码方式会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定的文件的内容也封装到请求参数里。上传文件使用这个方式。
三:
text/plain:这种方式 当表单的action属性为mailto:URL的形式时比较方便,这种方式主要用于直接、通过表单方式发送邮件 (已经不再采用了)。

一旦设置了表单为第二方式的话。就无法用getParameter方式获取到除文件域以外的表单控件。

解决方法如下:

需要导入包。
import org.apache.commons.fileupload.DiskFileUpload;
应该jar包名叫commons-fileupload.jar吧
还要有commons-io。jar

Java code
List   items   =   null;                              try{                DiskFileUpload   upload   =   new   DiskFileUpload();                items   =   upload.parseRequest(request);                Iterator   itr   =   items.iterator();                while(itr.hasNext())   {                FileItem   item   =   (FileItem)   itr.next();                if(item.isFormField())   {                String   fieldName   =   item.getFieldName();                if(fieldName.equals( "[color=#FF0000]控件名1[/color]")){                       //然后取值                            String a = filedName.equals("控件1");                           sysout a//打印控制台[快捷键]                               }                if(fieldName.equals( "[color=#FF0000]控件名2[/color]")){                        //然后取值                                 }                }                }                }catch(Exception   e)   {                    logger.error( "Exception: "   +   e);                }
[解决办法]
好吧我又二了,在javacode里不能设置字体颜色了。
[解决办法]
1楼上传方式是使用的apache commoning-fileupload,我不知道楼主使用的是这个还是struts2的文件上传?若是前者你参考1楼,若是后者,你在action里面private String courseid;set,get该属性,同时还有File,FileContentType,..属性,,,,同样,set,get

热点排行