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:
aqui les dejo mi metodò post de mi servlet:<%@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>
Código:
espero me puedan ayudar ya que no puedo encotrar el error. @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); } }