Notieren Sie sich die andere Validierungsmethode als das Kommentieren des Formulars (doppelte Überprüfung usw.). Dieses Mal verwenden wir Spring Validator anstelle von Bean Validation.
SessionForm
public class SessionForm {
private CheckForm checkForm;
//Fehlerausgabevariablen
private String error1;
private String error2;
//Setter weglassen usw.
CheckValidation
@Component
//Schnittstellenimplementierung
public class CheckValidation implements Validator {
//Injizieren, wenn der Helfer für die Prüfung verwendet wird
@Autowired
Helper helper;
@Override
public boolean supports(Class<?> clazz) {
//Geben Sie das Formular ein, das Sie überprüfen möchten(Sitzung zugeschriebene Klasse)
//isAssignableFrom enthält alle geerbten Klassen
return SessionForm.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
//Erstellen Sie die Zielklasse einmal
SessionForm form = (SessionForm) target;
//form.checkForm.~Sie können auch verschachtelte Elemente von verwenden
if (Bedingter Ausdruck) {
errors.rejectValue(
//Im Formular angegebene Variablen
"error1",
//Null, wenn die Nachricht nicht in einer anderen Datei definiert ist
null,
"Nachricht, die Sie ausgeben möchten");
}
//Führen Sie eine weitere Überprüfung durch
if (Bedingter Ausdruck) {
errors.rejectValue(
"error2",
null,
"Nachricht, die Sie ausgeben möchten");
}
}
Controller
@Controller
@SessionAttributes(names = "sessionForm")
public class ExampleController {
//Zur Tasteneinstellung
private static final String FORM_NAME = "sessionForm";
//Injizieren Sie Ihre eigene Validierungsklasse
@Autowired
CheckValidation checkValidation;
//Zu WebDataBinder hinzugefügt
@InitBinder("sessionForm")
public void initBinder(WebDataBinder binder) {
binder.addValidators(checkValidation);
}
//Der an die Methode angehängte Modus fügt dem Modell vor dem Aufruf einen Platz hinzu
@ModelAttribute(value = "sessionForm")
public SessionForm sessionForm() {
return new SessionForm();
}
//a
@RequestMapping(path="Der Pfad, den Sie in die Umleitung eingegeben haben", method=RequestMethod.GET)
public String putInformation(@ModelAttribute(FORM_NAME) SessionForm session, BindingResult result,ModelMap model) {
String key = BindingResult.MODEL_KEY_PREFIX + FORM_NAME;
//Wenn beim Umleiten ein Fehler im Modell vorliegt
if(model.containsKey("errors")) {
//Fehlerspeicherung im Kartenformat in dem in Schlüssel festgelegten Formular
model.addAttribute(key, model.get("errors"));
model.addAttribute("sessionForm" , session);
return "JSP usw. möchten Sie wechseln";
}
//Andere weggelassen
}
//b
@RequestMapping(path="Eingabebestätigungsbildschirm usw.", method=RequestMethod.POST)
public String confirmInfomation(@Validated SessionForm session, BindingResult result, Model model, RedirectAttributes ra)throws Exception {
if(result.hasErrors()) {
ra.addFlashAttribute("errors", result);
//Zum Eingabebildschirm umleiten
return "redirect:/{Zum Pfad des Controllers, den Sie aufrufen möchten}";
}
//Andere weggelassen
}
JSP
<form:errors path="error1" />
<form:errors path="error2" />
・ Erstellen Sie zunächst Fehlervariablen im vollständigen Formular. -Informationen werden in der Variablen in der variablen Datenklasse gespeichert.
Dieses Mal habe ich es durch Ausprobieren erstellt, daher denke ich, dass es einen besseren Weg gibt, aber ich habe mir eine Notiz gemacht, weil es funktioniert hat. Ich konnte es mit den Informationen (Datum usw.) vergleichen, die von der DB in der Varidata-Klasse stammen, daher dachte ich, dass Varidata einen ziemlich hohen Freiheitsgrad hat. Wenn ich andere Varidata als Spring implementiere, dachte ich, ich würde Bedingungen mit Filtern schreiben.
Recommended Posts