Foros del Web » Programación para mayores de 30 ;) » Java »

enctype='multipart/form-data' ¿Falla?

Estas en el tema de enctype='multipart/form-data' ¿Falla? en el foro de Java en Foros del Web. Hola explico un poco mi problema: lo que intento hacer es un jsp de donde envio los datos de un fomulario a un Servlet para ...
  #1 (permalink)  
Antiguo 20/04/2012, 06:58
 
Fecha de Ingreso: abril-2010
Mensajes: 30
Antigüedad: 14 años, 6 meses
Puntos: 0
enctype='multipart/form-data' ¿Falla?

Hola explico un poco mi problema:

lo que intento hacer es un jsp de donde envio los datos de un fomulario a un Servlet para procesa la informacion y luego insertar en una BD.

pero tengo un error en el formulario con el campo: enctype='multipart/form-data' me envia los todos los valores null al metodo post del servlet y si quito enctype='multipart/form-data' me los envia correctamente pero luego al procesar me dice que me falta el metodo enctype='multipart/form-data'

aqui dejo mi jsp:
Código:
<%@page pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> 

<fmt:setBundle basename="com.henrycieza.core.bienvenida.index" var="bundle"/>

<!DOCTYPE html>
<html>
    <head>
        ...
    </head>
    <body>
        <div id="envoltorio">
            <div id="cabecera">
                <h1 id="empresa"><fmt:message bundle="${bundle}" key="bienvenida.titulo"/></h1>
                <image id="logo" height="200px" wight="110px" src="${pageContext.request.contextPath}/imagenes/albumfotografico.jpg" />

            </div>
           <div id="cuerpo">
                    <div id="left">
                        
                        <div id="navcontainer">
                            <ul id="navlist">
                                <li id="active"><h4>Gestion Fotografica</h4></li>
                                <li><a href="${pageContext.request.contextPath}/index.jsp">Home</a></li>
                                <li><a href="${pageContext.request.contextPath}/app/altas/categorias/index.jsp">Categorias</a></li>
                                <li><a href="${pageContext.request.contextPath}/app/altas/imagenes/index.jsp">Imagenes</a></li>
                                <li><a href="${pageContext.request.contextPath}/app/listados/index.jsp">Listado Imagenes</a></li>
                                <li><a href="app/tarjetas/">...</a></li>
                                
                            </ul>
                        </div>

                    </div>
                    <div id="right">
                        
                       <div id="navcontainer1">
                                 <ul id="navlist1">
                                    <li>
                                        <a href="${pageContext.request.contextPath}/login/index.jsp"><image id="login" height="15px" wight="10px" src="${pageContext.request.contextPath}/imagenes/b_login.gif" /> </a>
                                    </li>
                                 </ul>
                        </div>
                        <image id="logocategoria" height="100px" wight="100px" src="${pageContext.request.contextPath}/app/altas/categorias/categorias.jpg" />             
                        <div id="errores">
                            <c:if test="${not empty requestScope.listaErrores}">
                                <h5>Errores</h5>
                                    <ol>
                                          <c:forEach items="${requestScope.listaErrores}" var="errorActual">
                                                <li>${errorActual}</li>
                                        </c:forEach>   
                                    </ol>
                           </c:if>  
                        </div> 
                        <form action="ctrl" enctype="multipart/form-data" method="post">
                                    <div id="formulario">
                                        <fieldset id="datosimagen">
                                            <legend>Datos de Imagen</legend>
                                            
                                            <label for="txtCategoria" accesskey="c" class="itemform1">Categoria </label><select name="lstCategoria"><option>Ciencia</option><option>Historia</option><option>Informatica</option></select><br/>
                                            <label for="txtImagen" accesskey="c" class="itemform1">Imagen </label><input class="itemform2" type="file" name="txtImagen" /><br />
                                            <label for="txtNombre" accesskey="c" class="itemform1">Nombre</label><input class="itemform2" type="text" name="txtNombre" /><br />
                                            <label for="txtCodigo" accesskey="c" class="itemform1">Codigo</label><input class="itemform2" type="text" name="txtCodigo" /><br />
                                            <label for="txtDescripcion" accesskey="c" class="itemform1">Descripción</label><br/>
                                            <textarea name="txtDescripcion" rows="4" cols="40" name="txtDescripcion"> Ingrese una descripción...</textarea>
                                            <fieldset id="activaimagen">
                                            <legend>Activar Imagen</legend>
                                                   <input type="radio" name="activaimagen" value="1" checked>Catalogada<br>
                                                    <input type="radio" name="activaimagen" value="0">Descatalogada<br>
                                            </fieldset>                                                                              
                                            <input type="submit" value="Enviar" name="enviar"/><input type="reset" value="Cancelar" name="btnCancelar" />
                                           
                                       </fieldset>  
                                    </div>
                          </form>             
                    </div> 
                        
                        
                    </div>    
               <div id="pie"></div>  
            </div>
           
            
       
    </body>
</html>
aqui les dejo mi metodò post de mi servlet:
Código:
   @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
                if(req.getParameter("enviar") != null){
                List<String> errores = this.validarFormulario(req);
                    if(errores.isEmpty() == true){
                       this.insertarImagen(req, resp);
                    }else{
                        this.mostrarFormulario(req, resp, errores);
                    }
                }

                if(req.getParameter("cancelar") != null){
                    this.ejecutarCancelar(req, resp);
                }
                if(req.getParameter("volver")!= null){
                    this.ejecutarVolver(req, resp);
                }
        }
       @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.mostrarFormulario(req, resp, null);
    } 
   private void insertarImagen(HttpServletRequest req, HttpServletResponse resp)throws ServletException,IOException {
            String categoria = null;
            String codigo = null;
            String nombre  = null;
          //String url = req.getParameter("txtNombre");
            String url = "c:files/imagenes/";
            String descripcion = null;
            Integer catalogo = 0;
            
            DiskFileItemFactory  fileItemFactory = new DiskFileItemFactory ();
            fileItemFactory.setSizeThreshold(1*1024*1024); //1 MB, umbral de archivos
            //directorio temporal para almacenar achivos que sobrepasan el umbral
            fileItemFactory.setRepository(tmpDir);
           
            ServletFileUpload uploadHandler = new ServletFileUpload(fileItemFactory); 
       
       try{
                //getPrincipal nos permite obtener el usuario actual
                String username = (req.getUserPrincipal() == null)? null:req.getUserPrincipal().getName();
                 
                List items = uploadHandler.parseRequest(req);
                Iterator itr = items.iterator();
                while(itr.hasNext()){ 
                    FileItem item = (FileItem)itr.next();
                    if(item.isFormField()){
                          categoria = req.getParameter("lstCategoria");
                          codigo = req.getParameter("txtCodigo");
                          nombre  = req.getParameter("txtNombre");
                        //url = req.getParameter("txtNombre");
                          url = "c:files/imagenes/";
                          descripcion = req.getParameter("txtDescripcion");
                          catalogo = Integer.parseInt(req.getParameter("activaimagen")); 
                    }else{
                        File file = new File(destinationDir, item.getName());
                        item.write(file);
                    }      
                }
                GestionGalleryServ servicio = GestionImagenesServFactory.crear();
                servicio.ejecutarInsertarImagen(username, categoria, url, codigo, nombre, descripcion, catalogo); 
                //sendRedirect lanza execepciones de IOEXception pero las propagamos 
                resp.sendRedirect("exito.jsp");
        }catch(BusinessException exc){
            List<String> errores = new ArrayList<String>();
            errores.add(exc.getMessage());
            this.mostrarFormulario(req, resp, errores);
        }
       catch(FileUploadException exc){
            log("Error mientras se parse la imagen", exc);
        }
       catch(Exception exc){
            log("Error mientras se cargaba la imagen", exc);
        }  
    }
espero me puedan ayudar ya que no puedo encotrar el error.
  #2 (permalink)  
Antiguo 20/04/2012, 09:01
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 2 meses
Puntos: 188
Respuesta: enctype='multipart/form-data' ¿Falla?

Normal, con ese request y ese response no puedes.

Revisa este post, que ahí están todas las respuestas que necesitas :P

http://www.forosdelweb.com/f45/error...m-data-949115/
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 23/04/2012, 18:32
 
Fecha de Ingreso: abril-2010
Mensajes: 30
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: enctype='multipart/form-data' ¿Falla?

hola nuevamente he podido dar una ojeada a el enlace que me enviastes, pero lo que sucede que ni de esta manera consigo que mi formulario me envie los datos al servlet todo me sigue llegando null, podria ser otra cosa que talvez me estoy dejando pasar por alto talvez algo de configuracion del xml, aunque este ejercicio sin esto me funciona correctamente.

Última edición por henryc33; 23/04/2012 a las 18:51
  #4 (permalink)  
Antiguo 24/04/2012, 08:20
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 2 meses
Puntos: 188
Respuesta: enctype='multipart/form-data' ¿Falla?

Si utilizas un MultipartRequest, en el lado del servlet no te vale con un simple req.getParameter("enviar")

Sino que tendrías que hacer algo como esto:

MultipartRequest mr = new MultipartRequest(request);
String [] enviarParams = mr.getParameterValues("enviar");
String enviarParam = enviarParams[0];

if(enviarParam != null){
// etc
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #5 (permalink)  
Antiguo 24/04/2012, 18:42
 
Fecha de Ingreso: abril-2010
Mensajes: 30
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: enctype='multipart/form-data' ¿Falla?

para trabajar con MultipartRequest tengo que trabajar con orelly pero yo estoy trabajando con FileUpLoad de Apache hay algo similar en apache que MultipartRequest que me pueda dar una parte de la Lista de elementos para hacer la validacion de que si se hizo clic con el boton Enviar pueda hacer la validacion y me haga el procesamiento de mis datos.
por lo demas me ha aclarado bastante el panorama.
gracias.
  #6 (permalink)  
Antiguo 25/04/2012, 01:24
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 2 meses
Puntos: 188
Respuesta: enctype='multipart/form-data' ¿Falla?

1. Buscar en google
2. Aplicar la solución B de: http://www.jguru.com/faq/view.jsp?EID=1045507

Otra opción es ver si puedes implementar esto:
http://struts.apache.org/2.0.14/stru...rtRequest.html
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}

Etiquetas: jsp
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:06.