Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

181
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!