在上传图片的时候,用户可以传多张图片,我通过JS来给页面添加input标签。
这就造成input标签个数不确定。那么我对应的struts表当的formbean应该怎么
设计啊?
在做多选框表单的时候,<input type="checkbox" value="1" />标签的值设置成整形的,我的frombean
可以设计成一个整形数组,而所有input标签的名字设置成一致。那么formbean获取的
这个整形数组就是我所有选中了的checkbox的值组成的数组。 效仿上面这个例子。我的formbean里设计一个FormFile数组files,而用页面中的
<input type="file" />标签的名字都设为files,原以为可以得到用户所输入的FormFile
数组,但是报错说类型不匹配。请问要怎么解决啊?
这就造成input标签个数不确定。那么我对应的struts表当的formbean应该怎么
设计啊?
在做多选框表单的时候,<input type="checkbox" value="1" />标签的值设置成整形的,我的frombean
可以设计成一个整形数组,而所有input标签的名字设置成一致。那么formbean获取的
这个整形数组就是我所有选中了的checkbox的值组成的数组。 效仿上面这个例子。我的formbean里设计一个FormFile数组files,而用页面中的
<input type="file" />标签的名字都设为files,原以为可以得到用户所输入的FormFile
数组,但是报错说类型不匹配。请问要怎么解决啊?
解决方案 »
- 会ireport的同仁们看过来 100分划线问题
- 怎么查找JTree节点,并展开它
- org.xml.sax.SAXParseException: Document root element "hibernate-AnnotationConfig
- struts1和struts2的区别
- could not initialize a collection 错误
- 请教,什么DAO模式?还有DTO
- 请教如何在Internet上发布自己机器的应用服务
- jbuilder9 + struts出现下面的错误,是怎么回事,那位大侠近来看:(
- struts和表单post的问题
- 高分求教,此作业如何下手?谢谢
- 如何在一对多双向关系中,增加多方的同时更新一方?
- JFreechart中文乱码问题
直接在action里从request对象里拿文件。
可以上网找个多文件上传的列子,如果不涉及文件上传,可使用将当前页面元素的值封装为一个xml然后通过ajax的send方法发送xmlDoc到后台,然后解析xml并处理业务即可
public class MultiUploadForm extends ActionForm { private List myFiles; public MultiUploadForm(){ myFiles = new ArrayList(); //为了能够在页面初始显示一个file myFiles.add(new UploadFile()); } public List getMyFiles() { return myFiles; }
//注意这个方法的定义
public UploadFile getUploadFile(int index){ int size = myFiles.size(); if(index>size-1){ myFiles.add(new UploadFile()); } return (UploadFile)myFiles.get(index); } public void setMyFiles(List myFiles) { this.myFiles = myFiles; }}
Dataset部分:public class UploadFile implements Serializable { private FormFile file; public FormFile getFile() { System.out.println("run in uploadFile.getFile()"); return file; } public void setFile(FormFile file) { this.file = file; }}Action部分:public class MultiUploadAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { MultiUploadForm multiUploadForm = (MultiUploadForm) form; List myFiles = multiUploadForm.getMyFiles(); for(int i =0;i<myFiles.size();i++){ UploadFile uploadFile = (UploadFile)myFiles.get(i); FormFile file = uploadFile.getFile();
if(file==null){ System.out.println("file is null"); } else{
//能运行到这里,就可以使用单个文件上传的方法进行上传了。循环而已 System.out.println("filename:::" + file.getFileName()); System.out.println("file size:::" + file.getFileSize()); } }
return null; }}
JSP部分:
<%@ page contentType="text/html; charset=GBK" %><%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %><%@ taglib uri="/WEB-INF/struts-nested.tld" prefix="nested" %>
<html:html><head><title>multiUploadDemo</title></head><script language="javascript" type=""> var num = 0; function addFile(){ var innerHTML = multiUploadForm.innerHTML; var signal = "<TD id=tdTarget>"; var signalLen = signal.length; var targetIndex = innerHTML.indexOf(signal);
var preHTML = innerHTML.substring(0,(targetIndex-6)); var subHTML = innerHTML.substring(targetIndex-6); num++; var insertHTML = "<TR><TD><input type=file name=uploadFile["+ num + "].file value=''></TD>"; innerHTML = preHTML + insertHTML + subHTML;
multiUploadForm.innerHTML = innerHTML; //alert(multiUploadForm.innerHTML); } function upload(){ multiUploadForm.submit(); }</script><body bgcolor="#ffffff"><html:form method="post" action="/multiUploadAction.do" enctype="multipart/form-data"><table border="1"><TBODY><br><br>
this is file <nested:iterate id="uploadFile" property="myFiles" name="multiUploadForm" indexId="index"> <nested:nest property="uploadFile"> <nested:file property="file" name="uploadFile" indexed="true"/> </nested:nest> </nested:iterate>
<TR> <input type="button" name="btnAddFile" value="Add File" onclick="addFile()"/> <TR><TD id="tdTarget"></TD> <input type="button" name="btnUpload" value="upload" onclick="upload()"></TBODY></table></html:form></body></html:html>
struts-config.xml部分:
<form-beans> <form-bean name="multiUploadForm" type="MultiUploadForm" /> </form-beans>
<action name="multiUploadForm" path="/multiUploadAction" type="MultiUploadAction" />
private List myFiles;
public MultiUploadForm(){
myFiles = new ArrayList();
//为了能够在页面初始显示一个file
myFiles.add(new UploadFile());
}
public List getMyFiles() {
return myFiles;
}
//注意这个方法的定义
public UploadFile getUploadFile(int index){
int size = myFiles.size();
if(index>size-1){
myFiles.add(new UploadFile());
}
return (UploadFile)myFiles.get(index);
}
public void setMyFiles(List myFiles) {
this.myFiles = myFiles;
}
}
Dataset部分:
public class UploadFile implements Serializable {
private FormFile file;
public FormFile getFile() {
System.out.println("run in uploadFile.getFile()");
return file;
}
public void setFile(FormFile file) {
this.file = file;
}
}
Action部分:
public class MultiUploadAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
MultiUploadForm multiUploadForm = (MultiUploadForm) form;
List myFiles = multiUploadForm.getMyFiles();
for(int i =0;i<myFiles.size();i++){
UploadFile uploadFile = (UploadFile)myFiles.get(i);
FormFile file = uploadFile.getFile();
if(file==null){
System.out.println("file is null");
}
else{
//能运行到这里,就可以使用单个文件上传的方法进行上传了。循环而已 System.out.println("filename:::" + file.getFileName());
System.out.println("file size:::" + file.getFileSize()); } }
return null;
}
}
JSP部分:
<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-nested.tld" prefix="nested" %>
<html:html>
<head>
<title>multiUploadDemo</title>
</head>
<script language="javascript" type="">
var num = 0;
function addFile(){
var innerHTML = multiUploadForm.innerHTML;
var signal = "<TD id=tdTarget>";
var signalLen = signal.length;
var targetIndex = innerHTML.indexOf(signal);
var preHTML = innerHTML.substring(0,(targetIndex-6));
var subHTML = innerHTML.substring(targetIndex-6);
num++;
var insertHTML = "<TR><TD><input type=file name=uploadFile["+ num + "].file value=''></TD>";
innerHTML = preHTML + insertHTML + subHTML;
multiUploadForm.innerHTML = innerHTML;
//alert(multiUploadForm.innerHTML);
}
function upload(){
multiUploadForm.submit();
}
</script>
<body bgcolor="#ffffff">
<html:form method="post" action="/multiUploadAction.do" enctype="multipart/form-data">
<table border="1">
<TBODY><br><br>
this is file
<nested:iterate id="uploadFile" property="myFiles" name="multiUploadForm" indexId="index"> <nested:nest property="uploadFile">
<nested:file property="file" name="uploadFile" indexed="true"/>
</nested:nest>
</nested:iterate>
<TR>
<input type="button" name="btnAddFile" value="Add File" onclick="addFile()"/>
<TR><TD id="tdTarget"></TD>
<input type="button" name="btnUpload" value="upload" onclick="upload()">
</TBODY>
</table>
</html:form>
</body>
</html:html>
struts-config.xml部分:
<form-beans>
<form-bean name="multiUploadForm" type="MultiUploadForm" />
</form-beans>
<action name="multiUploadForm" path="/multiUploadAction" type="MultiUploadAction" />
我似乎找到一个方法了。ActionForm.getMultipartRequestHandler().getAllElements()可以拿到页面中所有传过来的数据集合。
我现在试着去做下。多谢提醒。感激不尽