Notez la méthode de validation autre que l'annotation du formulaire (double vérification, etc.). Cette fois, nous utiliserons Spring Validator au lieu de Bean Validation.
SessionForm
public class SessionForm {
private CheckForm checkForm;
//Variables de sortie d'erreur
private String error1;
private String error2;
//Omettre les setters, etc.
CheckValidation
@Component
//Implémentation de l'interface
public class CheckValidation implements Validator {
//Injecter lors de l'utilisation de l'assistant pour Check
@Autowired
Helper helper;
@Override
public boolean supports(Class<?> clazz) {
//Entrez le formulaire que vous souhaitez vérifier(Classe attribuée à la session)
//isAssignableFrom inclut toutes les classes héritées
return SessionForm.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
//Créer la classe cible une fois
SessionForm form = (SessionForm) target;
//form.checkForm.~Vous pouvez également utiliser des éléments imbriqués par
if (Expression conditionnelle) {
errors.rejectValue(
//Variables spécifiées dans le formulaire
"error1",
//Nul si le message n'est pas défini dans un autre fichier
null,
"Message que vous souhaitez sortir");
}
//Faites une autre vérification
if (Expression conditionnelle) {
errors.rejectValue(
"error2",
null,
"Message que vous souhaitez sortir");
}
}
Controller
@Controller
@SessionAttributes(names = "sessionForm")
public class ExampleController {
//Pour le réglage des touches
private static final String FORM_NAME = "sessionForm";
//Injectez votre propre classe de validation
@Autowired
CheckValidation checkValidation;
//Ajouté à WebDataBinder
@InitBinder("sessionForm")
public void initBinder(WebDataBinder binder) {
binder.addValidators(checkValidation);
}
//Le mode attaché à la méthode ajoute une place au modèle avant d'appeler
@ModelAttribute(value = "sessionForm")
public SessionForm sessionForm() {
return new SessionForm();
}
//a
@RequestMapping(path="Le chemin que vous avez mis dans la redirection", method=RequestMethod.GET)
public String putInformation(@ModelAttribute(FORM_NAME) SessionForm session, BindingResult result,ModelMap model) {
String key = BindingResult.MODEL_KEY_PREFIX + FORM_NAME;
//S'il y a une erreur dans le modèle lors de la redirection
if(model.containsKey("errors")) {
//Stockage des erreurs au format carte sous la forme définie dans Key
model.addAttribute(key, model.get("errors"));
model.addAttribute("sessionForm" , session);
return "JSP, etc. que vous souhaitez effectuer la transition";
}
//Autres omis
}
//b
@RequestMapping(path="Écran de confirmation d'entrée, etc.", method=RequestMethod.POST)
public String confirmInfomation(@Validated SessionForm session, BindingResult result, Model model, RedirectAttributes ra)throws Exception {
if(result.hasErrors()) {
ra.addFlashAttribute("errors", result);
//Rediriger vers l'écran de saisie
return "redirect:/{Vers le chemin du contrôleur que vous souhaitez appeler}";
}
//Autres omis
}
JSP
<form:errors path="error1" />
<form:errors path="error2" />
・ Tout d'abord, créez des variables d'erreur sur le formulaire complet. -Les informations sont stockées dans la variable dans la classe de données variables. -En ajoutant un validateur à WebDataBinder sur le contrôleur, les données variables ajoutées après l'appel de BeanValidation sont appelées et la vérification auto-effectuée est effectuée. N'oubliez pas Autowired. -S'il y a une erreur dans BindingResult, redirigez tout en conservant ces informations (vérifiez la pièce avant de passer à l'écran de confirmation d'entrée, etc.). Le flux de la méthode est a → b → a. -Branch en fonction de la présence ou de l'absence d'une erreur dans la méthode de destination de la redirection, et s'il y en a, stockez les informations d'erreur dans le modèle et partagez-les avec le JSP. -Utilisez les erreurs dans la balise de formulaire dans JSP pour faire correspondre le chemin et les variables de formulaire de session et générer un message d'erreur.
Cette fois, je l'ai créé par essais et erreurs, donc je pense qu'il existe un meilleur moyen, mais j'ai fait une note parce que cela fonctionnait. J'ai pu le comparer avec les informations (date, etc.) apportées par la base de données dans la classe Varidata, j'ai donc pensé que Varidata avait un degré de liberté assez élevé. Si j'implémente Varidata autre que Spring, je pensais que j'écrirais des conditions en utilisant des filtres.
Recommended Posts