fileupload mit struts

cheops16

Grünschnabel
hallo, ich nutze die common-controls für meine webanwendungen. funktioniert eigentlich auch alles sehr gut, bis ich die anwendung mal mit dem IE (7 & 8) getestet hab.

hier erstmal ein kurzes quelltextbeispiel:

jsp:
Code:
<%@ taglib uri="/WEB-INF/tlds/cc-forms.tld"    prefix="forms" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/cc-controls.tld" prefix="ctrl" %>
<%@ taglib uri="/WEB-INF/tlds/cc-utility.tld"  prefix="util" %>

<html:html>
	<head>
 	<%-- Framework includes --%>
		<util:jsp directive="includes" />
	</head>
		<body leftmargin="0" topmargin="0" onload="init();">
			<html:form action="/Test" enctype="multipart/form-data" method="post" styleId="test">
						
				<% String tabValue = (String) session.getAttribute("tabValue");
				   if(tabValue == null)
					tabValue = "tab1"; 
				    String width = "500";
				%>
							   		
				<ctrl:tabset name="testControl" id="tabset" value="<%=tabValue%>"> 
					<ctrl:tab title="1" tabid="tab1" onclick="document.forms[0].submit();">
						<forms:form width="<%= width %>" type="create" formid="frmtab1">
							<forms:text property="text"/>
						</forms:form>
					</ctrl:tab>
					<ctrl:tab title="2" tabid="tab2" onclick="document.forms[0].submit();">
						<forms:form width="<%= width %>" type="create" formid="frmtab2" >
							<forms:file property="file"/>
						</forms:form>
					
					</ctrl:tab>
				</ctrl:tabset>
			</html:form>
	
		</body>
</html:html>

<%-- Framework cleanup processing --%>
<util:jsp directive="endofpage"/>

form:
Code:
import org.apache.struts.upload.FormFile;
import com.cc.framework.adapter.struts.FWActionForm;

public class TestForm extends FWActionForm{

	FormFile file = null;
	String   text = "";
	public FormFile getFile() {
		return file;
	}
	public void setFile(FormFile file) {
		System.out.println("set file");
		this.file = file;
	}
	public String getText() {
		return text;
	}
	public void setText(String text) {
		System.out.println("set text");
		this.text = text;
	}
}

und die action
Code:
import com.cc.framework.adapter.struts.ActionContext;
import com.cc.framework.adapter.struts.FWAction;
import com.cc.framework.ui.control.ControlActionContext;
import com.cc.framework.ui.control.TabsetControl;

public class TestAction extends FWAction{

	public void doExecute(ActionContext ctx) throws Exception {
		
		TabsetControl testControl = new TabsetControl();
		ctx.session().setAttribute("testControl", testControl);
		
		ctx.forwardToInput();
	}
	
	public void testControl_onTabClick(ControlActionContext ctx, String seltab) throws Exception
    {
		// der aktuelle Tab muss der Session übergeben werden
		ctx.session().setAttribute("tabValue", seltab);
		ctx.forwardToInput();
    }    
}


Problem:
########
wenn ich auf einen tab klicke, werden die daten des vorhergehenden tabs nicht gespeichert - deshalb habe ich für jeden tab den befehl
Code:
<ctrl:tab ... onclick="document.forms[0].submit();">
festgelegt. Damit werden alle Werte in der form gespeichert.

im firefox funktioniert alles sehr gut. nur im internet explorer kommt bei mir ein fehler, wenn ich auf einem tab bin, der ein <forms:file ...> feld hat. verlasse ich diesen tab, erhalte ich folgende fehlermeldung:

Code:
[Servlet Error]-[action]: org.apache.commons.fileupload.FileUploadException: Proces
sing of multipart/form-data request failed. Async IO operation failed, reason: RC: 107  Der Socket ist nicht verbunden
        at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:429)
        at org.apache.struts.upload.CommonsMultipartRequestHandler.handleRequest(CommonsMultipartRequestHandler.java:195)
        at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:445)
        at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:798)
        at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:205)
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
        at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1097)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:570)
...

scheinbar verträgt sich <forms:file ...> und onclick="document.forms[0].submit();" nicht
hat jemand eine idee, was man da machen kann?
vielen dank schonmal für eure mühe.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück