2011-05-28 26 views
6

Mi aplicación web de primavera es el uso de AJAX con la primavera, y se basa en general en la aplicación de demostración proporcionada por el resorte:Spring MVC + Ajax. Cómo mostrar los errores?

https://src.springframework.org/svn/spring-samples/mvc-ajax/trunk/ (Información adicional: http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/)

En el lado del cliente Tengo un formulario (JSP):

<form:form modelAttribute="createLevel" action="createLevel" method="post"> 
    <div class="form-item"> 

    <form:label id="nameLabel" for="name" path="name" cssErrorClass="error">Level Name</form:label><br/> 
    <form:input path="name" /><form:errors path="name" /> 
    </div> 
    <div class="form-item"> 
    <input type="submit" value="Submit"> 
    </div> 
</form:form> 

me envíe el formulario al servidor mediante el siguiente método JS:

$("#createLevel").submit(function() { 
     var level = $(this).serializeObject(); 
     $.postJSON("create.do", level, function(data) { 
      alert(data); 
     }); 
     return false;    
    }); 

En el lado del servidor tengo una validación, ya que se muestran a continuación:

public final class LevelDto extends AbstractDto implements Serializable { 
    private static final long serialVersionUID = 1L; 

    private int id; 

    @NotNull 
    @Size(min = 2, max = 30) 
    @LevelExistsConstraint(message = "Level with provided name is exists") 
    private String name; 
    // set; get; 
} 

y regulador

@RequestMapping(value = "/admin/create.do", method = RequestMethod.POST) 
    public @ResponseBody 
Map<String, ? extends Object> createLevel(@RequestBody LevelDto level, 
     HttpServletResponse response) { 
    //JSR-303 
    Set<ConstraintViolation<LevelDto>> failures = validator.validate(level); 

    if (!failures.isEmpty()) { 
     response.setStatus(HttpServletResponse.SC_BAD_REQUEST); 
     return validationMessages(failures); 

    } else { 

     return Collections.singletonMap("id", 10); 

    } 
} 

Cuando envío de datos incorrectos en el servidor veo que todas las cosas están en marcha correctamente - mi validador está procesando datos, y el cliente está recibiendo una respuesta de error; Por otra parte, en el contenido de la respuesta que veo lo siguiente:

{"name":"size must be between 2 and 30"} 

Mi problema es que no sé cómo enlazar mensaje de error recibido correctamente. Obviamente, puedo hacerlo por js, pero pensé que Spring vinculaba todos los mensajes de error automáticamente a la vista.

Cualquier ayuda es realmente apreciada.

-Cyril

+1

+1 Mismo problema. ¿Tienes tu solución? –

+0

Bueno, me rendí y utilicé el método recomendado por Adi (ver la respuesta aceptada) –

Respuesta

4

crear clase AjaxResponse como un contenedor de campo de formulario, el estado y la descripción.

class AjaxResponse { 
    model; //form attribute 
    status; // OK or ERROR 
    description; // message description such as error message 
} 

Puede rizar el resultado de la validación falla, generar Lista de AjaxResponse basada en la falta de validación resultado en formato JSON como una respuesta de la acción del controlador.

+0

Gracias, pero esta es una solución directa. Espero que todavía exista una forma de configurar los mensajes de enlace de resorte automáticamente –

Cuestiones relacionadas