Home > Enterprise >  BindigResult.hasErrors It doesn't work Spring frameworkd validation
BindigResult.hasErrors It doesn't work Spring frameworkd validation

Time:10-10

I am working with the Spring Framework, I have a model mapped to a controller with which I am trying to do some validations with the annotations offered by Spring, I use the BindingResult hasErrors() interface and also the @Validate annotation, however although I leave fields empty in my models (and specifies the @NotEmpty annotation) I can't get the hasErrors to change its state, it stays false. Am I forgetting something?

@Entity
@Table(name = "Clientes")
public class Cliente {

@Id
@Column(name= "ID_cliente") 
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer idCliente;

@Column(name= "Productos_cliente", nullable = true)
private String productosCliente;

@Column(name= "Primer_nombre")
@NotEmpty(message = "El nombre no puede estar vacio")
private String primerNombre;

@Column(name= "Segundo_nombre")
@NotEmpty
private String segundoNombre;

@Column(name= "Primer_apellido")
@NotEmpty
private String primerApellido;

@Column(name= "Segundo_apellido")
@NotEmpty
private String segundoApellido;

@Column(name= "Ciudad_cliente")
private String ciudadCliente;

@Column(name= "Direccion_cliente")
private String direccionCliente;

@Column(name= "Correo_electronico") 
@NotEmpty
private String email;

@Column(name= "Contraseña")
@NotEmpty
private String contraseña; 


public Cliente(String productosCliente, String primerNombre, String segundoNombre, String primerApellido, String segundoApellido, String email, String contraseña ){

    this.productosCliente = productosCliente;
    this.primerNombre = primerNombre;
    this.segundoNombre = segundoNombre;
    this.primerApellido = primerApellido;
    this.segundoApellido = segundoApellido;
    this.email = email;
    this.contraseña = contraseña;

}


/**
 * @return Integer return the idCliente
 */
public Integer getIdCliente() {
    return idCliente;
}

/**
 * @param idCliente the idCliente to set
 */
public void setIdCliente(Integer idCliente) {
    this.idCliente = idCliente;
}

/**
 * @return String return the productosCliente
 */
public String getProductosCliente() {
    return productosCliente;
}

/**
 * @param productosCliente the productosCliente to set
 */
public void setProductosCliente(String productosCliente) {
    this.productosCliente = productosCliente;
}

/**
 * @return String return the primerNombre
 */
public String getPrimerNombre() {
    return primerNombre;
}

/**
 * @param primerNombre the primerNombre to set
 */
public void setPrimerNombre(String primerNombre) {
    this.primerNombre = primerNombre;
}

/**
 * @return String return the segundoNombre
 */
public String getSegundoNombre() {
    return segundoNombre;
}

/**
 * @param segundoNombre the segundoNombre to set
 */
public void setSegundoNombre(String segundoNombre) {
    this.segundoNombre = segundoNombre;
}

/**
 * @return String return the primerApellido
 */
public String getPrimerApellido() {
    return primerApellido;
}

/**
 * @param primerApellido the primerApellido to set
 */
public void setPrimerApellido(String primerApellido) {
    this.primerApellido = primerApellido;
}

/**
 * @return String return the segundoApellido
 */
public String getSegundoApellido() {
    return segundoApellido;
}

/**
 * @param segundoApellido the segundoApellido to set
 */
public void setSegundoApellido(String segundoApellido) {
    this.segundoApellido = segundoApellido;
}

/**
 * @return String return the ciudadCliente
 */
public String getCiudadCliente() {
    return ciudadCliente;
}

/**
 * @param ciudadCliente the ciudadCliente to set
 */
public void setCiudadCliente(String ciudadCliente) {
    this.ciudadCliente = ciudadCliente;
}

/**
 * @return String return the direccionCliente
 */
public String getDireccionCliente() {
    return direccionCliente;
}

/**
 * @param direccionCliente the direccionCliente to set
 */
public void setDireccionCliente(String direccionCliente) {
    this.direccionCliente = direccionCliente;
}

/**
 * @return String return the email
 */
public String getEmail() {
    return email;
}

/**
 * @param email the email to set
 */
public void setEmail(String email) {
    this.email = email;
}

/**
 * @return String return the contraseña
 */
public String getContraseña() {
    return contraseña;
}

/**
 * @param contraseña the contraseña to set
 */
public void setContraseña(String contraseña) {
    this.contraseña = contraseña;
}

}

Controller:

@Controller
@Validated
public class FormController {

@Autowired
ClienteServices service; 

@GetMapping("/register")
public String formLoggin(Model model, Cliente cliente, BindingResult result)
{

    model.addAttribute("Title", "Registro");
    model.addAttribute("cliente", cliente);
   
    return "register";
}   

@PostMapping("/register")
public String sendForm(@Valid Cliente cliente, BindingResult send, Model model)
{   
    model.addAttribute("data", "Registro");
    
    if(send.hasErrors()){  <-- Does not evaluate this condition
        
        return "register";
    }
    model.addAttribute("cliente", cliente);

    
    return "dataUser";
}

}

register.html:

<body>
<div style="display: flex; flex-direction: column; min-width: 500; min-height: 800; align-items: center; justify-content: center;">
  
    <h3 th:text="${Title}"></h3>

    <form th:action="@{/register}" th:object="${cliente}" method="post">
        <div>
            <label for="Primer nombre">Primer nombre</label>
            <div>
                <input id="username" name="username" type="text" th:field="*{primerNombre}">
                <div th:if="${#fields.hasErrors('primerNombre')}" th:errors="*{primerNombre}"></div>
            </div>
        </div>

        <div>
            <label for="Primer apellido">Segundo nombre</label>
            <div>
                <input id="Secondname" name="Secondname" type="text" th:field="*{segundoNombre}">
                <div th:if="${#fields.hasErrors('segundoNombre')}" th:errors="*{segundoNombre}"></div>
            </div>
        </div>

        <div>
            <label for="Primer apellido">Primer apellido</label>
            <div>
                <input id="Surname" name="Surname" type="text" th:field="*{primerApellido}">
            </div>
        </div>

        <div>
            <label for="Segundo apellido">Segundo apellido</label>
            <div>
                <input id="secondSurname" name="secondSurname" type="text" th:field="*{segundoApellido}">
            </div>
        </div>

        <div>
            <label for="Email">Correo electrónico</label>
            <div>
                <input id="Email" name="email" type="email" th:field="*{email}">
            </div>
        </div>

        <div>
            <label for="contraseña">Contraseña</label>
            <div>
                <input id="contraseña" name="password" type="password" th:field="*{contraseña}">
            </div>
        </div>

        <div>
            <label for="contraseña">Ciudad</label>
            <div>
                <input id="City" name="City" type="text" th:field="*{ciudadCliente}">
            </div>
        </div>

        <div>
            <label for="contraseña">Dirección</label>
            <div>
                <input id="Dir" name="Dir" type="text" th:field="*{direccionCliente}">
            </div>
        </div>



        <div >
            <button type="submit">Enviar</button>
        </div>

    </form>
</div>

CodePudding user response:

First insert this dependency, then try

<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>

CodePudding user response:

Instead of annotating with '@NotEmpty' you can follow this method:

@Column(name= "Correo_electronico", nullable = false) private String email;

When you use this method either Jpa or Hibernate will throw an error if the value is empty.

  • Related