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

Ejemplo y duda. Validacion formulario SPRINGMVC

Estas en el tema de Ejemplo y duda. Validacion formulario SPRINGMVC en el foro de Java en Foros del Web. Muy buenas, veamos a ver si consigo explicarme de forma clara jeje. Como digo en el enunciado estoy intentando validar datos editados desde un formularios ...
  #1 (permalink)  
Antiguo 24/05/2013, 03:22
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 4 meses
Puntos: 22
Ejemplo y duda. Validacion formulario SPRINGMVC

Muy buenas, veamos a ver si consigo explicarme de forma clara jeje.

Como digo en el enunciado estoy intentando validar datos editados desde un formularios mediante Spring creando mi propio Validator, ya que puede existir la posibilidad de que en algun momento las validaciones de unos datos puedan estar condicionadas por las validaciones de otros, y por eso he decidido hacerlo asi.

Este sería el bean donde se almacenan los datos del formulario:

Código JAVA:
Ver original
  1. public class ArticuloVO {  
  2.    
  3.     private int idArticulo;
  4.     private int idVolumen;
  5.     private UsuarioVO autor;  
  6.     private String tituloArticulo;
  7.     private String resumenArticulo;
  8.     private String coautoresArticulo;      
  9.     private String imagenArticulo;
  10.     private String pdfArticulo;
  11.     private EstadoVO estadoArticulo;
  12.  
  13.     //Getters y setters

Luego esta el validador que yo he creado especifico para este bean, evidentemente valido solo los datos que me interesa validar y que se van a poder modificar desde el formulario:

Código JAVA:
Ver original
  1. public class ValidadorEditarArticulo implements Validator {
  2.    
  3.     @Override
  4.     public void validate(Object target, Errors errors) {   
  5.         ArticuloVO articulo = (ArticuloVO) target;              
  6.        
  7.         // El titulo es obligatorio
  8.         ValidationUtils.rejectIfEmptyOrWhitespace(errors, "tituloArticulo", "field.tituloArticulo.required",
  9.                 "Es obligatorio indicar un TITULO para el articulo");
  10.        
  11.         if(!articulo.getTituloArticulo().isEmpty()){
  12.             if(!validarLongitudTitulo(articulo.getTituloArticulo())){
  13.                 errors.rejectValue("tituloArticulo", "field.tituloArticulo.invalid", "El TITULO debe tener entre 10 y 75 caracteres");
  14.             }
  15.         }
  16.        
  17.         // El resumen es obligatorio
  18.         ValidationUtils.rejectIfEmptyOrWhitespace(errors, "resumenArticulo", "field.resumenArticulo.required",
  19.                 "Es obligatorio indicar un RESUMEN para el articulo");
  20.        
  21.         if(!articulo.getResumenArticulo().isEmpty()){
  22.             if(!validarLongitudResumen(articulo.getResumenArticulo())){
  23.                 errors.rejectValue("resumenArticulo", "field.resumenArticulo.invalid", "El RESUMEN debe tener entre 100 y 500 caracteres");
  24.             }
  25.         }  
  26.        
  27.         if(!articulo.getCoautoresArticulo().isEmpty()){
  28.             if(!validarLongitudCoautores(articulo.getCoautoresArticulo())){
  29.                 errors.rejectValue("coautoresArticulo", "field.coautoresArticulo.invalid", "El campo COAUTORES debe tener entre menos de 100 caracteres");
  30.             }
  31.         }  
  32.     }    
  33.     public boolean validarLongitudTitulo(String campo) {
  34.         if(campo.length()>=10 && campo.length()<=75){
  35.             return true;
  36.         }
  37.         return false;
  38.     }  
  39.     public boolean validarLongitudResumen(String campo) {
  40.         if(campo.length()>=100 && campo.length()<=500){
  41.             return true;
  42.         }
  43.         return false;
  44.     }  
  45.     public boolean validarLongitudCoautores(String campo) {
  46.         if(campo.length()<=100){
  47.             return true;
  48.         }
  49.         return false;
  50.     }  
  51. }

Luego esta el controlador desde el cual comprueba si los datos se han validado correctamente y realizo las operaciones oportunas:

Código JAVA:
Ver original
  1. package controladores;
  2.  
  3. @Controller
  4. @RequestMapping("privado")
  5. public class ControladorFormEditarArticulo {    
  6.    
  7.     @RequestMapping("editarArticulo")
  8.     public String editarArticulo(@RequestParam("id") int idArticulo, ModelMap modelo) throws SQLException {
  9.        
  10.         ArticuloManager managerArticulo = ManagerFactory.getInstance().getArticuloManager();
  11.         modelo.addAttribute("articulo", managerArticulo.getArticulo(idArticulo) );
  12.         return "formularioEditarArticulo";
  13.     }
  14.    
  15.     /**
  16.      * Registramos el validar que se va a utilizar para este formulario
  17.      * @param binder
  18.      */
  19.     @InitBinder
  20.     protected void initBinder(WebDataBinder binder) {
  21.         binder.setValidator(new ValidadorEditarArticulo()); // registramos el validador        
  22.     }
  23.  
  24.     @RequestMapping(value = "actualizarArticulo", method = RequestMethod.POST)
  25.     public String actualizarArticulo(@Valid ArticuloVO articuloCambios,
  26.             BindingResult result, ModelMap modelo) throws SQLException {        
  27.         // si hay errores volvemos a la vista del formulario
  28.         if ( result.hasErrors() ) {        
  29.             modelo.addAttribute("articulo", articuloCambios);
  30.             modelo.addAttribute("errors", result.getAllErrors());
  31.             return "formularioEditarArticulo";
  32.         }
  33.          
  34.         // si no hay errores, manejamos los datos validados...
  35.         //Obtenemos de nuevo los datos del Articulo que se va a modificar
  36.         ArticuloManager managerArticulo = ManagerFactory.getInstance().getArticuloManager();  
  37.         ArticuloVO articulo = managerArticulo.getArticulo(articuloCambios.getIdArticulo());
  38.  
  39.         //AQUI SE HARIAN LAS OPERACIONES PARA GUARDAR EL ARTICULO
  40.        
  41.                
  42.         modelo.addAttribute("success", "Los cambios se han guardado correctamente");
  43.         modelo.addAttribute("articulo", articulo);        
  44.        
  45.         return "formularioEditarArticulo";
  46.          
  47.     }
  48.    
  49.     /**
  50.      * Indica el bean que va a contener los registros del formulario
  51.      * @return
  52.      */
  53.     @ModelAttribute("articulo")
  54.     public ArticuloVO populateForm() {
  55.          return new ArticuloVO(); // creamos el bean para que se pueda popular
  56.     }
  57.      
  58. }

Y por ultimo la JSP del formulario:

Código HTML:
Ver original
  1. <c:url value="actualizarArticulo.htm" var="destino" />
  2.                 <form:form cssClass="form-horizontal formulario" method="post"
  3.                     action="${destino}" commandName="articulo">
  4.  
  5.                     <c:choose>
  6.                         <c:when test="${not empty  errors}">
  7.                             <div class="error">
  8.                                 <c:forEach items="${errors}" var="err">
  9.                                     <div class="alert alert-error">
  10.                                         <i class="icon-warning-sign"></i> ${err.defaultMessage}
  11.                                     </div>
  12.                                 </c:forEach>
  13.                             </div>
  14.                         </c:when>
  15.                         <c:when test="${not empty  success}">
  16.                             <div class="alert alert-success">${success}</div>
  17.                         </c:when>
  18.                     </c:choose>
  19.  
  20.                     <div class="control-group">
  21.                         <div class="controls">
  22.                             <form:input path="idArticulo" readonly="true" type="hidden"
  23.                                 value="${articulo.idArticulo}" />
  24.                             <form:input path="idVolumen" readonly="true" type="hidden"
  25.                                 value="${articulo.idVolumen}" />
  26.                         </div>
  27.                     </div>
  28.                     <div class="control-group">
  29.                         <form:label class="control-label" path="tituloArticulo">Titulo articulo</form:label>
  30.                         <div class="controls">
  31.                             <form:input path="tituloArticulo" placeholder="Titulo"
  32.                                 value="${articulo.tituloArticulo}" />
  33.                         </div>
  34.                     </div>
  35.                     <div class="control-group">
  36.                         <form:label class="control-label" path="resumenArticulo">Resumen articulo</form:label>
  37.                         <div class="controls">
  38.                             <form:textarea rows="10" cols="20" path="resumenArticulo"
  39.                                 placeholder="Resumen del articulo"
  40.                                 value="${articulo.resumenArticulo}" />
  41.                         </div>
  42.                     </div>
  43.                     <div class="control-group">
  44.                         <form:label class="control-label" path="coautoresArticulo">Resumen articulo</form:label>
  45.                         <div class="controls">
  46.                             <form:textarea rows="1" cols="20" path="coautoresArticulo"
  47.                                 placeholder="Coautores del articulo"
  48.                                 value="${articulo.coautoresArticulo}" />
  49.                         </div>
  50.                     </div>
  51.                     <div class="control-group">
  52.                         <form:label class="control-label" path="imagenArticulo">Url imagen</form:label>
  53.                         <div class="controls">
  54.                             <form:input path="imagenArticulo" placeholder="Url imagen" />
  55.                         </div>
  56.                     </div>
  57.                     <div class="control-group">
  58.                         <form:label class="control-label" path="pdfArticulo">Pdf imagen</form:label>
  59.                         <div class="controls">
  60.                             <form:input path="pdfArticulo" placeholder="Url pdf" />
  61.                         </div>
  62.                     </div>
  63.                     <div class="control-group">
  64.                         <div class="controls">
  65.                             <button type="submit" class="btn">Guardar</button>
  66.                         </div>
  67.                     </div>
  68.                 </form:form>

Muy bien, pongo todo el codigo, porque a alguien le puede servir de ejemplo ya que el codigo en si funciona.

La funcionalidad es la siguiente, formulario con datos precargados de un objeto ArticuloVO, se modifican los datos en el formulario, se validan y se guardan.
El problema esta en que al validar solo ciertos campos... en el VO quedan campos vacios, en concreto, los objetos:

UsuarioVO autor;
EstadoVO autor;

que no se pueden pasar a traves del formulario, cual es la forma correcta de reinsertar estos objetos, hay alguna forma de hacerlo automatico? o simplemente debo obtener el Articulo de la BBDD y luego utilizar setters para insertar los cambios introducidos en el formulario?

Etiquetas: ejemplo, formulario, jsp, spring, string, validacion
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 18:00.