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