2009-10-01 30 views
5

Ich habe ein Problem beim Hochladen einer Datei mit Spring Webflow 1.0 und Struts 1.3.Struts - Hochladen von Dateien

Die jsp ist so etwas wie diese:

<html:form action="/flowAction" method="post" enctype="multipart/form-data"> 
    <!-- snip --> 
    <html:file property="file" name="attachDocumentsForm" size="50"/> 
    <!-- snip --> 
</html:form> 

Das Formular so etwas wie diese:

public class AttachDocumentsForm extends SpringBindingActionForm { 
    // note, SpringBindingActionForm extends struts' ActionForm 
    private FormFile file; 
    //snip 
} 

Nun, mein Problem ist, dass, wenn ich das Formular, das file Feld ist immer null . Die anderen Felder auf dem Formular sind richtig ausgefüllt, und wenn ich durch die RequestContext graben, kann ich finden, dass die Datei einige der Datenstrukturen dort tief vergraben ist. Hier

ist die schrecklich hässliche Art und Weise, die ich an der Befestigung zu bekommen:

// 'context' is the RequestContext 
ServletExternalContext servletExternalContext = (ServletExternalContext) context.getExternalContext(); 
ActionForm form = (ActionForm) servletExternalContext.getRequest().getAttribute("actionForm"); 
FormFile file = (FormFile) form.getMultipartRequestHandler().getFileElements().get("file"); 

ich bemerkt habe, dass die MultipartRequestHandler auf meine Form ist null, und ich vermute, dass dieser Teil der sein könnte Problem, aber ich habe versucht, es mit einer Instanz von CommonsMultipartRequestHandler ohne Erfolg zu füllen.

Was muss ich tun, damit das Feld file korrekt ausgefüllt wird?

+0

Sollten Sie nicht in der Lage sein, die Datei aus dem Action Accessor zu bekommen, mit (Formfile) form.getFile()? –

Antwort

0

Fügen Sie ein Feld mit dem Namen FormFile in Ihrem ActionForm hinzu (das von attachDocumentsForm verwiesen wird), zusammen mit den Accessor-Methoden.

Die hochgeladene Datei kann durch Aufruf von form.getFile() erreicht werden.

Ich hoffe, das hilft!

+0

Danke, aber das ist nur das Problem. Ich habe bereits eines dieser Felder auf der ActionForm, aber es ist immer Null. –

+0

Ich weiß nicht, ob jemand das seit 2006 durchgemacht hat, aber ich habe genau das gleiche Problem in einem Legacy-Projekt, an dem ich arbeite ... wenn jemand die Lösung hat, wäre das großartig :-) – Philippe

+0

Selbes Problem Hier. –

1

Ich denke, Sie sollten Frühjahr Dispatcher Servlet konfigurieren: http://static.springsource.org/spring/docs/2.0.x/reference/mvc.html#mvc-multipart-resolver

+0

Danke für das Update, ich werde das prüfen. Ich weiß, dass ich die von Ihnen verknüpften Dokumente konsultiert und einen mehrteiligen Resolver als Teil dieses Prozesses definiert habe. Ich bin mir überhaupt nicht sicher, ob ich es richtig verdrahtet habe (es sind ein paar Monate vergangen, seitdem ich es mir angesehen habe). Ich nehme einen weiteren Pass, wenn ich eine Chance bekomme. –