Si vous utilisez Bean Validation pour vérifier l'entrée et générer un message d'erreur, vous devez être prudent si vous souhaitez inclure le nom du champ dans le contenu, alors prenez note.
: star: Exemple de projet sur GitHub
Si vous souhaitez afficher le message suivant dans le formulaire suivant
UserForm.java
import java.io.Serializable;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class UserForm implements Serializable {
private static final long serialVersionUID = 1L;
@NotNull(message = "{userForm.name}")
@Size(min = 1, max = 20, message = "{userForm.name}")
private String name;
// getter/setter omis
"[name] is not null."
UserControl.java
import javax.validation.Validator;
@Resource
private Validator validator;
//Partie de traitement réelle
Set<ConstraintViolation<UserForm>> violations = validator.validate(form);
if (!violations.isEmpty()) {
for (ConstraintViolation<UserForm> v : violations) {
log.info(v.getMessage());
}
}
application-context.xml
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
ValidationMessage.properties
userForm.name={0} is not null.
Je pensais que {0} serait remplacé par le nom du champ, mais le résultat de sortie réel est affiché sans être remplacé comme indiqué ci-dessous.
{0} is not null.
Autrement dit, utilisez @Validated comme suit
UserControl.java
@RequestMapping(value = "create", method = RequestMethod.POST, params = "confirm")
public String createConfirm(@Validated UserForm form, BindingResult result) {
if (result.hasErrors()) {
return "user/createForm";
}
return "user/createConfirm";
}
Ou utilisez Smart Validator
UserControl.java
import org.springframework.validation.SmartValidator;
@Resource //Validateur intelligent<mvc:annotation-driven>La définition de bean n'est pas requise car elle peut être utilisée si est définie.
private SmartValidator smartValidator;
@RequestMapping(value = "create", method = RequestMethod.POST, params = "confirm")
public String createConfirm(UserForm form, BindingResult result) {
smartValidator.validate(form, result);
if (result.hasErrors()) {
return "user/createForm";
}
return "user/createConfirm";
}
--LocalValidatorFactoryBean ne peut pas afficher le message d'erreur avec le nom du champ. --Parce qu'il est réalisé par la liaison de données Spring --Utilisez @Validated ou SmartValidator pour atteindre
Recommended Posts