Struts中不限个数上传文件的实现方案
在使用Struts的系统中使用 org.apache.struts.upload.FormFile 可以很方便的实现文件的上传,无论是单个或者多个文件。不过又应该如何来实现不限个数的文件上传呢?
首先,在Jsp页面中,需要有像163那样动态添加附件的功能,这个可以使用JS来实现。代码如下:
<
tr
bgcolor
="#FFFFFF"
>
<
td
nowrap id
="fileTD"
align
="center"
colSpan
="2"
>
<
input
name
="uploadFile(0)"
type
="file"
size
="40"
>
<
input
type
="button"
onclick
="addFile()"
value
="添加"
/>
</
td
>
</
tr
>
var
fileIndex
=
0
;
function
addFile()
{
fileIndex
++
;
var
spanId
=
"
fileTD
"
;
var
fileId
=
"
uploadFile(
"
+
fileIndex
+
"
)
"
;
addInputFile(spanId, fileId);
}
function
addInputFile(spanId, fileId)
{
var
span
=
document.getElementById(spanId);
if
(span
!=
null
)
{
var
divObj
=
document.createElement(
"
div
"
);
var
fileObj, delObj;
divObj.id
=
fileId;
fileObj
=
document.createElement(
"
<input type=file>
"
);
delObj
=
document.createElement(
"
<input type=button onclick=delInputFile('
"
+
spanId
+
"
','
"
+
fileId
+
"
')>
"
);
fileObj.name
=
fileId;
fileObj.size
=
"
40
"
;
fileObj.className
=
"
input
"
;
delObj.value
=
'删除';
divObj.appendChild(fileObj);
divObj.appendChild(document.createTextNode(
"
"
));
divObj.appendChild(delObj);
span.appendChild(divObj);
}
}
function
delInputFile(spanId, fileId)
{
var
span
=
document.getElementById(spanId);
var
divObj
=
document.getElementById(fileId);
if
(span
!=
null
&&
divObj
!=
null
)
{
span.removeChild(divObj);
}
}
上面代码中的Html和JS代码就可以实现动态添加行的效果。(上述JS代码参考了一位网友的实现,这里对他表示感谢。)
Html代码中的
<
input
name
="uploadFile(0)"
type
="file"
size
="40"
>
容易让人迷惑,我也是第一次写
name
="uploadFile(0)"
这样的Html代码
。
这里的
uploadFile(0)
表示数组中index=0的元素,那么在Struts的FormBean中又应该如何让BeanUtils在做反射的时候可以正确的赋值呢?
来看一下FormBean中的代码:
import
java.util.ArrayList;
import
org.apache.struts.action.ActionForm;
import
org.apache.struts.upload.FormFile;
public
class
BulletinInfoForm
extends
ActionForm
{
private
static
final
long
serialVersionUID
=
-
7869342360944575352L
;
private
Long id;
private
String newsTitle;
private
String newsType;
private
String newsContent;
private
ArrayList
<
FormFile
>
uploadFiles
=
new
ArrayList
<
FormFile
>
();
public
void
setUploadFile(String index, FormFile formFile)
{
this
.uploadFiles.add(formFile);
}
public
ArrayList
<
FormFile
>
getUploadFiles()
{
return
this
.uploadFiles;
}
public
Long getId()
{
return
id;
}
public
void
setId(Long id)
{
this
.id
=
id;
}
public
String getNewsContent()
{
return
newsContent;
}
public
void
setNewsContent(String newsContent)
{
this
.newsContent
=
newsContent;
}
public
String getNewsTitle()
{
return
newsTitle;
}
public
void
setNewsTitle(String newsTitle)
{
this
.newsTitle
=
newsTitle;
}
public
String getNewsType()
{
return
newsType;
}
public
void
setNewsType(String newsType)
{
this
.newsType
=
newsType;
}
}
留意以上代码中的
public
void
setUploadFile(String index, FormFile formFile)
{
this
.uploadFiles.add(formFile);
}
这里提供的setUploadFIle(String index, FormFile formFile)其实就是给BeanUtils一个正确的借口,让它可以对uploadFile(0)这样的元素进行正确的反射。当然,这里不用考虑index,直接将formFile添加进list中。
因此,在Struts中不限个数上传文件的实现中,主要是页面中动态添加上传文件行和在FormBean中正确赋值,Action中要做的相信就很简单了,只要把FormBean中的List取出来逐个进行操作。
posted on 2006-09-01 11:38
旱头憨脑
阅读(419)
评论(0)
编辑
收藏
所属分类:
j2ee
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
Javascript cookie操作攻略
Spring2.0 AOP 心得(二)
Spring2.0 AOP使用心得(一)
Tomcat中,UTF-8 URL提交参数中文解决终极方案
Struts中不限个数上传文件的实现方案
Spring2.0 新特性之Bean新增范围session, request, global session
旱头憨脑
lanluquan
导航
BlogJava
首页
新随笔
联系
聚合
管理
统计
随笔 - 1
文章 - 10
评论 - 1
引用 - 0
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔档案
■
2006年10月 (1)
文章分类
■
ajax(1)
(rss)
■
j2ee(7)
(rss)
■
java
(rss)
■
ruby(1)
(rss)
■
非技术(1)
(rss)
文章档案
■
2008年6月 (1)
■
2007年9月 (1)
■
2007年7月 (1)
■
2006年10月 (4)
■
2006年9月 (1)
■
2006年8月 (2)
搜索
最新评论
1. re: Hibernate3 父子映射报错:illegal access to loading collection
评论内容较长,点击标题查看
--d