struts2多文件上传时,比如:
xx.jsp中包含两个同名的文本框和文件域。这里运行用户只填写用户名。文件选填
<form name="myform" method="post" action="add.action" enctype="multipart/form-data">
<input type="text" name="user" /><input type="file" name="pic" />
<input type="text" name="user" /><input type="file" name="pic" />
</form>在Action类文件如下(只写关键部分)
Java code
private List<File> pic;
private List<String> user;
//对应的getter 和 setter方法略
public String execute(){
//(1)下面种情况,只有当文件域都为空或者都不为空时可用。
for(int i=0;i<user.size();i++){
if(pic!=null){
//上传文件和将user,pic路径信息写入数据库.
}else{
//只将user信息写入数据库.
}
}
//(1)下面种情况,必须文件域都不为空,否则将抛出nullpointexception。
for(int i=0;i<user.size();i++)
if(pic.get(i)!=null){
//上传文件和将user,pic路径信息写入数据库.
}else{
//只将user信息写入数据库.
}
}
自己测试了下:System.out.print(user.size());值都等于2
System.out.pring(pic.size());当两个文件域都为空是=0,一个填写=1,都填写=2
这样的话,就不好将对应的信息写入数据库了。请教解决办法springFile类型Action
xx.jsp中包含两个同名的文本框和文件域。这里运行用户只填写用户名。文件选填
<form name="myform" method="post" action="add.action" enctype="multipart/form-data">
<input type="text" name="user" /><input type="file" name="pic" />
<input type="text" name="user" /><input type="file" name="pic" />
</form>在Action类文件如下(只写关键部分)
Java code
private List<File> pic;
private List<String> user;
//对应的getter 和 setter方法略
public String execute(){
//(1)下面种情况,只有当文件域都为空或者都不为空时可用。
for(int i=0;i<user.size();i++){
if(pic!=null){
//上传文件和将user,pic路径信息写入数据库.
}else{
//只将user信息写入数据库.
}
}
//(1)下面种情况,必须文件域都不为空,否则将抛出nullpointexception。
for(int i=0;i<user.size();i++)
if(pic.get(i)!=null){
//上传文件和将user,pic路径信息写入数据库.
}else{
//只将user信息写入数据库.
}
}
自己测试了下:System.out.print(user.size());值都等于2
System.out.pring(pic.size());当两个文件域都为空是=0,一个填写=1,都填写=2
这样的话,就不好将对应的信息写入数据库了。请教解决办法springFile类型Action
但是如果文件域为空。List<File>就没有被自动注入。
这个应该可以证明:
System.out.print(user.size());值一直都等于2
============
System.out.pring(pic.size());
当两个文件域都为空是=0
一个文件域为空,输出1.
两个都不空。输出2
但是user应为是List<String> 所以填不填都是输出的2,不填也add()了元素
比如有两个user,一个上传pic,另一个没有上传,那么user.length的长度为2,而pic.length的长度为1!
比如有两个user,一个上传pic,另一个没有上传,那么user.length的长度为2,而pic.length的长度为1!
要真是这样,我认为你提交的时候可以通过js把上传文件的tr的行表传给action也可以,我以为即使2个file都不上传action接到的长度也是2呢
action:
private List<User> people;
xx.jsp:
<form name="myform" method="post" action="add.action" enctype="multipart/form-data">
<input type="text" name="people.user" /><input type="file" name="people.pic" />
<input type="text" name="people.user" /><input type="file" name="people.pic" />
</form>
private List<User> people;
//对应的getter 和 setter方法略
public String execute(){
for(int i=0;i<people.size();i++){
File pic=people.getPic();
String user=people.getUser();
if(pic!=null){
//上传文件和user,pic路径信息写入数据库.
}else{
//只将user信息写入数据库.
}
}
}
{
private static final long serialVersionUID = 1L;
private List<User> people;
//setter、getter方法
public String execute()
throws Exception
{
System.out.println(people.size());
for(int i=0;i<people.size();i++)
{
File pic=people.get(i).getPic();
String picContentType=people.get(i).getPicContentType();
String picFileName=people.get(i).getPicFileName();
String user=people.get(i).getUser();
System.out.println("pic:"+pic+" "+"picContentType:"+picContentType+" "+"picFileName:"+picFileName);
}
return "SUCCESS";
}
}class User
{
private String user;
private File pic;
private String picContentType;//上传文件的类型
private String picFileName;
//setter、getter方法
public User(String user, File pic, String picContentType, String picFileName) {
super();
this.user = user;
this.pic = pic;
this.picContentType = picContentType;
this.picFileName = picFileName;
}
public User() {
super();
}
}但是如果在jsp页面填写完成之后怎么people的长度为8呢,显示结果如下:8
pic:E:\Java\MyEclipseProject\.metadata\.me_tcat\work\Catalina\localhost\DataImportSystemBeta2\upload_a70ee86_13f5baddf5e__8000_00000006.tmp picContentType:null picFileName:null
pic:E:\Java\MyEclipseProject\.metadata\.me_tcat\work\Catalina\localhost\DataImportSystemBeta2\upload_a70ee86_13f5baddf5e__8000_00000008.tmp picContentType:null picFileName:null
pic:null picContentType:image/x-png picFileName:null
pic:null picContentType:image/pjpeg picFileName:null
pic:null picContentType:null picFileName:xjkb.png
pic:null picContentType:null picFileName:天猫刷刷.jpg
pic:null picContentType:null picFileName:null
pic:null picContentType:null picFileName:null一个file被提交了四次!
如果直接这样写,用户把这四个控件都赋值,提交以后得到的people.size()为4。
能帮忙解答一下吗
xx.jsp:
<form name="myform" method="post" action="add.action" enctype="multipart/form-data">
<input type="text" name="people[0].user" /><input type="file" name="people[0].pic" />
<input type="text" name="people[1].user" /><input type="file" name="people[1].pic" />
</form>
people后面必须加下标,不加下标的话会对应4个people。加了下标的话user和pic对应起来!
感谢,给分!