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.