2009-10-01 17 views
5

Tengo un problema al cargar un archivo usando spring webflow 1.0 y struts 1.3.Struts - Cargando archivos

El JSP es algo como esto:

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

la forma es algo como esto:

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

Ahora, mi problema es que cuando envíe el formulario, el campo file es siempre null . Los otros campos en el formulario se completan correctamente, y si busco en el RequestContext, puedo encontrar que el archivo está profundamente enterrado en algunas de las estructuras de datos.

Aquí es el horriblemente fea manera que puedo conseguir en el archivo adjunto:

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

me he dado cuenta de que el MultipartRequestHandler en mi formulario es null, y sospecho que esto podría ser parte de la problema, pero he intentado poblarlo con una instancia de CommonsMultipartRequestHandler en vano.

¿Qué debo hacer para permitir que el campo file se rellene correctamente?

+0

¿No deberías ser capaz de obtener el archivo desde el descriptor de acceso ActionForm, usando (FormFile) form.getFile()? –

Respuesta

0

Agregue un campo denominado archivo de tipo FormFile en su ActionForm (el referido por attachDocumentsForm), junto con los métodos de acceso. Se puede acceder al archivo cargado llamando al form.getFile().

Espero que esto ayude!

+0

Gracias, pero ese es solo el problema. Ya tengo uno de esos campos en ActionForm, pero siempre es nulo. –

+0

No sé si alguien pasó por esto desde 2006, pero tengo exactamente el mismo problema en un proyecto heredado en el que estoy trabajando ... si alguien tiene la solución, sería genial :-) – Philippe

+0

Mismo problema aquí. –

1

creo que debe configurar servlet despachador de primavera: http://static.springsource.org/spring/docs/2.0.x/reference/mvc.html#mvc-multipart-resolver

+0

Gracias por la actualización, investigaré esto. Sé que consulté los documentos que vinculó y definí un solucionador de partes múltiples como parte de ese proceso. Sin embargo, no estoy del todo seguro de haberlo conectado correctamente (han pasado unos meses desde que miré esto). Daré otro paso cuando tenga oportunidad. –