C'est un mémorandum pour changer le message lorsque le contrôle de validation est effectué avec annotation dans le démarrage du ressort
Spring Boot 1.5.4(Maven)
Créer un contrôleur, un formulaire, une vue
LoginController.java
@Controller
@RequestMapping({"/", "/login"})
public class LoginController extends BaseController {
@ModelAttribute
public LoginForm initForm(){
return new LoginForm();
}
@RequestMapping(value = {"/index", "/"}, method = RequestMethod.GET)
public String index(Model model){
return "test/index";
}
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@ModelAttribute @Validated TestForm form, BindingResult result, Model model)
{
if(result.hasErrors()){
return "test/index";
}
//Processus de connexion
......
return "redirect:/menu/index";
}
}
LoginForm.java
public class LoginForm extends BaseForm {
@NotEmpty
public String userId;
@NotEmpty
public String password;
/*Getter pour une utilisation avec thymeleaf/besoin de setter*/
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
login/index.html
<!DOCTYPE html>
<html
xmlns = "http://www.w3.org/1999/xhtml"
xmlns:th = "http://www.thymeleaf.org"
xmlns:layout = "http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorator="layout"
>
<head>
<title>S'identifier</title>
</head>
<body>
<div layout:fragment="contents">
<form class="form-horizontal" method="POST" action="/login/login/" th:action="@{/login/login}" th:object="${loginForm}">
<div class="form-group">
<p th:if="${#fields.hasErrors('*{userId}')}" th:errors="*{userId}" class="col-sm-offset-2 text-danger"></p>
<label for="user-id" class="col-sm-2 control-label">Identifiant d'utilisateur</label>
<div class="col-sm-5">
<input type="text" class="form-control" id="user-id" th:field="*{userId}" placeholder="Identifiant d'utilisateur" />
</div>
</div>
<div class="form-group">
<p th:if="${#fields.hasErrors('*{password}')}" th:errors="*{password}" class="col-sm-offset-2 text-danger"></p>
<label for="password" class="col-sm-2 control-label">mot de passe</label>
<div class="col-sm-5">
<input type="password" class="form-control" id="password" th:field="*{password}" placeholder="mot de passe" />
</div>
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary col-sm-2 col-sm-offset-2" name="login" value="S'identifier" />
<input type="reset" class="btn btn-default col-sm-2 col-sm-offset-1" name="clear" value="clair" />
</div>
</form>
</div>
</body>
</html>
Ensuite, créez une classe qui hérite de WebMvcConfigurerAdapter
Il semble que le message ne prend pas en charge UTF-8 par défaut, donc
Réglez l'encodage sur UTF-8
AppConfigurerAdapter.java
@Configuration
public class AppConfigurerAdapter extends WebMvcConfigurerAdapter {
@Bean(name="validator")
public LocalValidatorFactoryBean localValidatorFactoryBean() {
LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();
localValidatorFactoryBean.setValidationMessageSource(messageSource());
return localValidatorFactoryBean;
}
/**
*Message de validation UTF-Gérez avec 8.
* @return
*/
@Bean(name = "messageSource")
public MessageSource messageSource()
{
ReloadableResourceBundleMessageSource bean = new ReloadableResourceBundleMessageSource();
bean.setBasename("classpath:ValidationMessages");
bean.setDefaultEncoding("UTF-8");
return bean;
}
}
Ensuite, créez un fichier de propriétés qui décrit le message de validation directement sous le dossier resource
.
Le nom de fichier doit être le nom de fichier spécifié dans ʻAppConfigurerAdapter.java`.
La clé du message spécifie le nom complet de l'annotation.
Le nom du champ est entré dans «{0}» du message
Si vous souhaitez donner un alias au nom du champ, définissez également le nom du champ
ValidationMessages.properties
#message
org.hibernate.validator.constraints.NotEmpty.message={0}Entrez s'il vous plait.
#Nom de domaine
userId=Identifiant d'utilisateur
password=mot de passe
Ceci est le résultat d'une pression sur le bouton de connexion sans entrer l'ID utilisateur et le mot de passe sur l'écran de connexion.
Recommended Posts