Spring Boot thymeleaf 验证不起作用

Posted

技术标签:

【中文标题】Spring Boot thymeleaf 验证不起作用【英文标题】:Spring boot thymeleaf validation not working 【发布时间】:2020-11-05 09:10:44 【问题描述】:

你好,我在 sping boot MVC 中引入了 thymeleaf

我看了很多例子,但我找不到为什么不能正常工作。

我正在尝试使用“nombre”和“direction”两个字段进行表单验证,但它始终验证模型是否正确,并重定向到“mensajeView”。

我尝试在@Valid 之后添加@RequestBody,但没有成功。

我的模特:

@Entity
public class Almacen 

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idAlmacen", updatable = false, nullable = false)
    private int idAlmacen;
    
    
    @NotEmpty(message = "La clave no puede estar en blanco")
    private String nombre;
    @NotEmpty(message = "Error")
    private String direccion;

    public int getIdAlmacen() 
        return idAlmacen;
    

    public void setIdAlmacen(int idAlmacen) 
        this.idAlmacen = idAlmacen;
    

    public String getNombre() 
        return nombre;
    

    public void setNombre(String nombre) 
        this.nombre = nombre;
    

    public String getDireccion() 
        return direccion;
    

    public void setDireccion(String direccion) 
        this.direccion = direccion;
    


我的控制器

    @PostMapping("/crearAlmacen")
    public String crearAlmacenPost(@Valid Almacen almacen, BindingResult result, Model model) 
        if (result.hasErrors()) 
            return "crearAlmacen";
         else             
            model.addAttribute("mensaje","Operacion completada con exito");
            return "mensajeView";
        
    

我的看法:

    <form action="#" th:object="$almacen" th:action="@/crearAlmacen" method="post">
        <div class="container">
            <div class="row justify-content-center align-items-center minh-100">
                <div class="col-lg-4">
                    <h2>Nuevo almacen</h2>


                    <div class="form-group">
                        <label for="nombre">Nombre</label> 
                        <input id="nombre" th:field="*nombre" placeholder="Nombre" type="text" class="form-control">
                        <td th:if="$#fields.hasErrors('nombre')" th:errors="*nombre">Error</td>
                    </div>

                    <div class="form-group">
                        <label for="direccion">Dirección</label> 
                        <input id="direccion" th:field="*direccion" placeholder="Direccion" type="text" class="form-control">
                        <td th:if="$#fields.hasErrors('direccion')" th:errors="*direccion">Error</td>
                    </div>
                 <button class="btn btn-success" type="submit">Guardar</button>
                </div>
            </div>
        </div>
    </form>

【问题讨论】:

尝试 @Valid @ModelAttribute Almacen almacen 并将 @NotEmpty 注释更改为 @NotBlank 谢谢,但不起作用 【参考方案1】:

终于解决了。我正在从 javax.validation.constraints 导入 notempty 标签。我将其更改为 org.hibernate.validator.constraints 并且效果很好

【讨论】:

【参考方案2】:

org.hibernate.validator.constraints 已弃用。我有同样的问题,我添加了依赖项。

<!-- add to work validation -->
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>2.0.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.0.2.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator-annotation-processor</artifactId>
        <version>6.0.2.Final</version>
    </dependency>
    <!-- end validation  -->

【讨论】:

以上是关于Spring Boot thymeleaf 验证不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot与Thymeleaf的表单验证

thymeleaf + spring-boot 验证错误未显示在 html 上

@Valid 表单验证不适用于 Thymeleaf Spring Boot

在模态表单中使用 Spring Boot 和 thymeleaf 进行服务器端验证

Spring boot 如何让 Thymeleaf 网页和 REST API 具有不同的身份验证方案

thymeleaf sec:授权在 Spring Boot 中不工作