动态增加文件上传,表单中的数据如何处理(hibernate ,struts) property name="FileName" type="java.lang.String" column="FileName" 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 建议按照如下步骤完成:1.JSP页面增加一个字段属性为formFile的文本框 <html:form action="FileTest.do?method=upload" enctype="multipart/form-data"> 请选择文件:<html:file property="formfile"/> <a href="javascript:void(addFile());" class="file">添加附件</a> <div id="fileDiv"> <table id=conditionTable> </table> </div> <html:submit property="" value="提交"/> </html:form>2.增加多行的JS脚本<script type="text/javascript"> var i=0; function addFile(){ i++; var currRow=conditionTable.insertRow(); //插入当前行 var currCell=currRow.insertCell();//插入单元格 var currCellContext="<input type=file name=formfile_"+ i +"> <a href='javascript:void(0)' onclick='removeFile();'>去除</a><br/>"; currCell.innerHTML=currCellContext; //填充单元格 } function removeFile(){ var o = findTD(event.srcElement); conditionTable.deleteRow(o.parentElement.rowIndex); } //查找table中td对象 function findTD(o){ if (o.nodeName=="TR"||o.nodeName=="TABLE") return; if(o.nodeName=="TD") return (o); else return (o.parentElement); } </script>特别注意的是:addFile()方法中增加表单上传域的HTML代码<input type=file name=formfile_"+ i +"> 定义的一个变量i是为了区别每个上传表单域的name。方便我们在action里集中将这些转换成对象存入HASHTABLE,如果name一样,则只能有一个被存入HASHTABLE.3.ActionForm 增加一字段 private FormFile formFile 对应页面上的那个上传文本框4.Action 依次取得多附件上传信息7. Action的设计。以下是文件上传的代码。该代码可以实现多文件上传,也可以只上传一个文件。利用actionForm.getMultipartRequestHandler().getFileElements();方法将表单中已有的上传域全部存进HASHTABLE,然后遍历,在通过FormFile转换成文件对象。在调用FormFile对象的get方法给VO对象赋值。最后将VO和FormFile一并交由DELEGEATE向下传递给DAO去处理。说明:本例中完全可以只传递一个FormFile对象一个参数。但考虑到表单可能包含其他一些业务字段信息也需要传递,故设计成传递两个参数 public ActionForward upload(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception { //多附件上传,也可以只有一个附件,看在JSP页面中如何设计 FileTestSVO info=new FileTestSVO(); Hashtable ht=actionForm.getMultipartRequestHandler().getFileElements(); for(Enumeration e =ht.keys();e.hasMoreElements();){ String key=(String)e.nextElement(); FormFile form=(FormFile)ht.get(key); String filetype=form.getFileName().toLowerCase(); if(filetype.endsWith(".doc")||filetype.endsWith(".xls")||filetype.endsWith(".txt")){ info.setFilename(form.getFileName()); FileTestDelegate.getInstance().addFileBlob(info,form); } } return mapping.findForward("init"); }这样就可以完成多附件上传咯 我用struts做表单和图片上传的时候在action里获取表单的内容总是为空 关于文本框中默认值的问题 怎么将String转换为Long java java正则表达式问题(高分急求-雪地跪求) Hibernate检索排序问题 急急急购物车问题如何实现购物物品自动曾家数量的问题 求教:tomcat优化的问题 弱问下,servlet里println.out后面的代码? 用java做web开发时动态生成【shtml】的问题 请大家推荐一些XML方面的书! 关于apache soap的安装问题 建行的开发工具SUP4J问题,高手进来指点下!! js中访问webservice时出现"invalid active port"错误
1.JSP页面增加一个字段属性为formFile的文本框
<html:form action="FileTest.do?method=upload" enctype="multipart/form-data">
请选择文件:<html:file property="formfile"/>
<a href="javascript:void(addFile());" class="file">添加附件</a>
<div id="fileDiv">
<table id=conditionTable>
</table>
</div>
<html:submit property="" value="提交"/>
</html:form>
2.增加多行的JS脚本
<script type="text/javascript">
var i=0;
function addFile(){
i++;
var currRow=conditionTable.insertRow(); //插入当前行
var currCell=currRow.insertCell();//插入单元格
var currCellContext="<input type=file name=formfile_"+ i +"> <a href='javascript:void(0)' onclick='removeFile();'>去除</a><br/>";
currCell.innerHTML=currCellContext; //填充单元格
}
function removeFile(){
var o = findTD(event.srcElement);
conditionTable.deleteRow(o.parentElement.rowIndex);
}
//查找table中td对象
function findTD(o){
if (o.nodeName=="TR"||o.nodeName=="TABLE")
return;
if(o.nodeName=="TD")
return (o);
else
return (o.parentElement);
}
</script>特别注意的是:addFile()方法中增加表单上传域的HTML代码<input type=file name=formfile_"+ i +"> 定义的一个变量i是为了区别每个上传表单域的name。方便我们在action里集中将这些转换成对象存入HASHTABLE,如果name一样,则只能有一个被存入HASHTABLE.
3.ActionForm 增加一字段 private FormFile formFile 对应页面上的那个上传文本框
4.Action 依次取得多附件上传信息
7. Action的设计。
以下是文件上传的代码。该代码可以实现多文件上传,也可以只上传一个文件。
利用actionForm.getMultipartRequestHandler().getFileElements();方法将表单中已有的上传域全部存进HASHTABLE,然后遍历,在通过FormFile转换成文件对象。在调用FormFile对象的get方法给VO对象赋值。最后将VO和FormFile一并交由DELEGEATE向下传递给DAO去处理。
说明:本例中完全可以只传递一个FormFile对象一个参数。但考虑到表单可能包含其他一些业务字段信息也需要传递,故设计成传递两个参数
public ActionForward upload(ActionMapping mapping, ActionForm actionForm,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//多附件上传,也可以只有一个附件,看在JSP页面中如何设计
FileTestSVO info=new FileTestSVO();
Hashtable ht=actionForm.getMultipartRequestHandler().getFileElements();
for(Enumeration e =ht.keys();e.hasMoreElements();){
String key=(String)e.nextElement();
FormFile form=(FormFile)ht.get(key);
String filetype=form.getFileName().toLowerCase();
if(filetype.endsWith(".doc")||filetype.endsWith(".xls")||filetype.endsWith(".txt")){
info.setFilename(form.getFileName());
FileTestDelegate.getInstance().addFileBlob(info,form);
}
}
return mapping.findForward("init");
}这样就可以完成多附件上传咯