Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

184
Vistas
Spring JSR-303 con formulario: etiqueta de errores

Estoy tratando de usar la validación JSR-303 y mostrar sus resultados en la página jsp . Aquí hay una pieza de código de página jsp que muestra un error:

 <c:set var="Error"> <form:errors path="name"/> </c:set> ... <spring:transform value="${Error}"/>

En el controlador tengo lo siguiente:

 @PostMapping(params = "next") public String next(@Valid @ModelAttribute(COMMAND_NAME) final ProjectNewDetailsCommand cmd, final Errors errors, final Model model, final HttpServletRequest request) {

Primero, la solución que funcionó para mí es escribir una clase de Validator personalizada:

 @Override public void validate(Object o, Errors errors) { errors.pushNestedPath("project"); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "error.project.creation.name.required"); errors.popNestedPath(); }

En este caso, se aplicó el messages.properties apropiado de message.properties y se muestra en la interfaz de usuario:

 error.project.creation.name.required=The name must not be blank.

Aquí hay otro caso cuando uso la anotación JSR-303 :

 public class Project { ... @Size(max = 100, message = "error.project.creation.size") private String name;

En message.properties hay un messages.properties bajo la clave error.project.creation.size , también intenté agregar el mensaje con la clave Size.command.project.name como se indica en algunas de las fuentes. El objeto de Error en el controlador tampoco está vacío y contiene errores de validación. Pero cuando uso este enfoque con JSR-303 , aparece el siguiente error:

 Caused by: javax.servlet.jsp.JspTagException: No message found under code 'Size' for locale 'en_US'. at org.springframework.web.servlet.tags.MessageTag.doEndTag(MessageTag.java:200)

Lo que significa que, por alguna razón Spring intenta aplicar el código de error Size en lugar de error.project.creation.size o Size.command.project.name . ¿Alguna idea de por qué sucede esto y cómo solucionarlo?

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Finalmente pude encontrar el origen del problema. En el código para generar alertas, había una etiqueta spring:message :

 <spring:message code="${error.code}" arguments="${error.arguments}"/>

Si funciona de la siguiente manera: busca el último código de la matriz de codes en la clase de Errors (consulte el método DefaultMessageSourceResolvable.getCode ) y es por eso que no pudo encontrar el mensaje Size y no recogió el defaultMessage creado por el validador de hibernación o el personalizado. una.

La solución simple en este caso fue agregar un atributo de text :

 <spring:message code="${error.code}" arguments="${error.arguments}" text="${error.defaultMessage}"/>
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda