Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/04/2012, 06:58
henryc33
 
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.