Thymeleaf:如何在JSR-303批注中使用自定义消息密钥

使用Thymeleaf

Person.java

public class Person { @NotEmpty(message="{Valid.Password}") private String password; } 

message.properties

 Valid.Password = Password is Empty!! 

的login.html

  

th:errors无法检索’Valid.Password’消息该区域显示为空。

如果消息密钥更改为message.properties的NotEmpty.person.password,那么它正在工作。

如何使用自定义消息密钥?

在类上使用javax.validation约束并添加自定义消息需要您基本上覆盖默认消息。 例如:

 public class Vehicle implements Serializable { private static final long serialVersionUID = 1L; @Size(min=17, max=17, message="VIN number must have 17 characters") private String vin; @NotEmpty @Pattern(regexp="[az]*", flags = Pattern.Flag.CASE_INSENSITIVE) private String make; @NotEmpty @Pattern(regexp="[az]*", flags = Pattern.Flag.CASE_INSENSITIVE) private String model; 

要覆盖默认值,可以在validation本身中插入自定义消息,例如VIN,或将它们添加到messages.properties文件中:

 # Validation messages notEmpty.message = The value may not be empty! notNull.message = The value cannot be null! 

通过这种方式,您可以覆盖以下内容的默认值:

 javax.validation.constraints.NotEmpty.message javax.validation.constraints.NotNull.message 

如果您需要针对不同字段的特定消息,则消息属性应按以下格式包含它们:[constraintName.Class.field]。 例如:

 NotEmpty.Vehicle.model = Model cannot be empty! 

如果您不包含上面的覆盖值,它将显示默认值,或一般覆盖,如notEmpty消息。

当然,还有其他方式可以显示validation消息,例如使用来自Validator实例的ConstraintViolation对象所需的信息。

希望这可以帮助,