废话不说 ,一个老生常谈的问题加点需求:struts 上传不定数量文件 (我用的struts 1.1 带的Formfile ) , 几点要求和说明如下 :
1. 最重要的一点,JSP 页面上传框的名字是相同的(构成数组形式,便于动态增减上传框的数量等),比如 上传文档的都用的一个名字,上传图片的用的是另外一个名字 ,不是这种情况的就请不用拿出来了,我会!
详细情况可参看我的blog或者JSP页面截图,地址如下:
http://download1.csdn.net/down3/20070601/01104322187.GIF
2. 页面有固定数量的上传框和不定数量 两种,并且并不一定每个上传都一定要输入上传的内容(比如针对固定数量上传框的那种),只要解决了第一点,这点就好办了。
3. 不要想当然,我自己试过多个解决方案,比如:getMultipartRequestHandler(). getFileElements()和form里用map
形式等,都没能达到理想的效果。
因此自己没有测试成功的,也请不要show 出来了。
4.请尽量提供较完整的解决方案,比如jsp,form,action 相应代码或连接均可以!
5.感谢up 者 和关注此帖者!
6. 由于我一次最多只能给分100 ,所以我会开几个帖来,原来已开了2个帖,连接如下:
http://community.csdn.net/Expert/topic/5439/5439331.xml?temp=.510998
http://community.csdn.net/Expert/topic/5441/5441537.xml?temp=.9765436
主帖为此帖,我会随时关注,如有补充,我会在跟帖中说明,解决问题者立即给分 , 500分一分不少 ,讲的就是信誉!
7.考虑到能实时交流,在此留下我的联系方式:
QQ :527487771
Email : ouhn@ouhn.com
如有不对的地方,还望管理员斑竹们能通融或告知我一下,谢谢!
------解决方案--------------------
upVO 定义
private FormFile[] files;
对应生成 setter & getter
页面
<input name= "vo.files " >
<input name= "vo.files " >
<input name= "vo.files " >
<input name= "vo.files " >
...
<input name= "vo.files " >
DynaActionForm dyForm = (DynaActionForm) form;
upVO vo = (upVO) dyForm.get( "vo ");
if(vo.getFiles() != null){
for(int i = 0 ; i < vo.getFiles().length; i++ ){
FormFile file = vo.getFiles()[i];
if(file != null && !file.equals( " ") && !files.getFileName().equals( " ") && files.getFileSize() > 0){
////// 进行上传以及其他当前文件的操作
}
}
------解决方案--------------------
我原来建了UploadFile的类 ,
只有一个属性 private FormFile[] files
另外如果我不用DynaActionForm(因为要写很多属性到config文件里面等原因),而用普通actionForm , 那form 里面怎么写才能对应 对应 <input name= "vo.files " type=file> ?
我在form 写 private UploadFile vo = new UploadFile() ;提示参数不匹配,
也不能写成private UploadFile vo.files .
这个地方还请指教? 谢谢!
=======================================
在UploadFile 里面要设置对应的 setter 和 getter
struts
<form-bean name= "upfilesForm " type= "org.apache.struts.validator.DynaValidatorForm ">
<form-property name= "vo " type= "com.....vo.UploadFile "/>
</form-bean>
这样写,只要一个 vo 就把页面上的所有的属性都带过来了
也就是所有的 vo.XXX
的对应的东东
比如,你还有一个,vo.name or vo.id
<input name= "vo.name " type=text>
<input name= "vo.id " type=hidden>
action 如上所说的做,循环操作文件
DynaActionForm dyForm = (DynaActionForm) form;
UploadFile vo = (UploadFile) dyForm.get( "vo ");
页面
<form name= "upfilesForm " method= "post " action= "./XXXXAction.do?cmd=onSave " ENCTYPE= "multipart/form-data ">
<input name= "vo.files " type=file>
<input name= "vo.files " type=file>
<input name= "vo.files " type=file>
<input name= "vo.files " type=file>
<input name= "vo.files " type=file>