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.