在用struts2上传文件的时候,怎么动态的控制上传的文件的个数,就是说,可以添加任意个<s:file>,也可以删除任意个<s:file>?
解决方案 »
- Struts2中,标签<s:checkbox disabled="true">,提交表单不能获取值
- Unable to load configuration.
- excel 下拉框 和读取文件的问题
- showModalDialog问题
- 107个常用Javascript语句
- 单表one to one 问题
- Myeclipse中启动Tomcat问题
- 两种在Action中获得数据源的方法有什么不同?
- 利用applet来当web service的客户端,需要用到哪些axis的jar包?为什么会报安全异常,如何解决?
- 各位兄台帮帮忙,小弟急求《精通EJB(第二版)》中文电子书!找了好久只有E文的。。。
- JBOSS不能通过IP访问
- struts1.1 struts-config配置文件里面className怎么用?
<html>
<head>
<script language="javascript">function addComponent()
{
var uploadHTML = document.createElement( "<input type='file' name='upload'/>");
document.getElementById("files").appendChild(uploadHTML);
uploadHTML = document.createElement( "<p/>");
document.getElementById("files").appendChild(uploadHTML);
}
</script>
</head>
<body>
<input type="button" onclick="addComponent();" value="添加文件" />
<br />
<form onsubmit="return true;" action="/struts2/test/upload.action"
method="post" enctype="multipart/form-data">
<span id="files"> <input type='file' name='upload' />
<p />
</span>
<input type="submit" value="上传" />
</form>
</body></html> 上面的javascript代码可以生成任意多个<input type=’file’>标签,name的值都为file(要注意的是,上面的javascript代码只适合于IE浏览器,firefox等其他浏览器需要使用他的代码)。至于Action类,和上传单个文件的Action类基本一至,只需要将三个属性的类型改为List即可。代码如下:package action;import java.io.*;
import com.opensymphony.xwork2.ActionSupport;public class UploadMoreAction extends ActionSupport
{
private java.util.List<File> uploads;
private java.util.List<String> fileNames;
private java.util.List<String> uploadContentTypes; public java.util.List<String> getUploadFileName()
{
return fileNames;
}
public void setUploadFileName(java.util.List<String> fileNames)
{
this.fileNames = fileNames;
}
public java.util.List<File> getUpload()
{
return uploads;
} public void setUpload(java.util.List<File> uploads)
{
this.uploads = uploads;
} public void setUploadContentType(java.util.List<String> contentTypes)
{
this.uploadContentTypes = contentTypes; } public java.util.List<String> getUploadContentType()
{
return this.uploadContentTypes;
} public String execute() throws Exception
{
if (uploads != null)
{
int i = 0;
for (; i < uploads.size(); i++)
{
java.io.InputStream is = new java.io.FileInputStream(uploads.get(i));
java.io.OutputStream os = new java.io.FileOutputStream(
"d:\\upload\\" + fileNames.get(i));
byte buffer[] = new byte[8192];
int count = 0;
while ((count = is.read(buffer)) > 0)
{
os.write(buffer, 0, count);
}
os.close();
is.close();
}
}
return SUCCESS;
}
} 在execute方法中,只是对List对象进行枚举,在循环中的代码和上传单个文件时的代码基本相同。如果读者使用过struts1.x的上传组件,是不是感觉Struts2的上传功能更容易实现呢?在Struts1.x中上传多个文件时,可是需要建立带索引的属性的。而在Struts2中,就是这么简单就搞定了。
<%@ page language="java" pageEncoding="GB2312"%> <div id="file" >
<input type="file" name="file1">
<input name="提交" type="submit" value="上传文件">
<input name="继续添加附件" type="button" value="继续添加" onclick="AddMore()">
</div>
<script type="text/javascript">
function AddMore(){
var more = document.getElementById("file");
var br = document.createElement("br");
var input = document.createElement("input");
var button = document.createElement("input");
input.type = "file";
input.name = "file";
button.type = "button";
button.value = "取消";
more.appendChild(br);
more.appendChild(input);
more.appendChild(button);
button.onclick = function(){
more.removeChild(br);
more.removeChild(input);
more.removeChild(button);
};
}
</script>LZ参考一下!!!