Als ich versuchte, mit Controller mithilfe von HibernateValidator in der WASLiberty-Umgebung zu validieren, wurden nur die mit HibernateValidator kommentierten Felder nicht überprüft. Es scheint, dass einige Leute Probleme mit ähnlichen Ereignissen haben, obwohl sie gelöst wurden, also werde ich es als Memo belassen.
Zunächst aus einer einfachen Konfiguration. Controller
package com.atu496.sample.pl.controller;
@Controller
public class MainController {
@GetMapping("/")
public ModelAndView get(@ModelAttribute SampleForm form, ModelAndView mav) {
mav.addObject("form", form);
mav.setViewName("index");
return mav;
}
@PostMapping("/exe/validation")
public String exe(@ModelAttribute @Valid SampleForm form, BindingResult result, RedirectAttributes attribute) {
if (result.hasErrors()) {ß
for (ObjectError error : result.getAllErrors()) {
String fieldErrors = ((FieldError) error).getField();
attribute.addFlashAttribute(fieldErrors + "errormsg", error.getDefaultMessage());
}
}
return "redirect:/";
}
}
Form
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;
import lombok.Data;
@Data
public class SampleForm {
@Length(min = 8, max = 20)
private String length;
@NotBlank
private String notblank;
@NotEmpty
private String notempty;
@Email
private String email;
}
Thymeleaf
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Validierung des Ruhezustands-Validators</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css"
integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp"
crossorigin="anonymous">
<!-- Latest compiled and minified JavaScript -->
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
crossorigin="anonymous"></script>
</head>
<body>
<div class="container">
<div class="row">
<div class="jumbotron">
<h1>Validierung des Ruhezustands-Validators</h1>
<p>Demo-Seite zur Überprüfung des Ruhezustands.</p>
</div>
<div class="panel panel-success">
<div class="panel-heading">Validierungsprüfung</div>
<div class="panel-body">
<form method="post" action="#" th:action="@{/exe/validation}">
<p>
@Length:<input type="text" name="length" /><span
th:text="${lengtherrormsg}"></span>
</P>
<p>
@Email:<input type="text" name="email" /><span
th:text="${emailerrormsg}"></span>
</P>
<p>
@NotEmpty:<input type="text" name="notnull" /><span
th:text="${notemptyerrormsg}"></span>
</P>
<p>
@NotBlank:<input type="text" name="notblank" /><span
th:text="${notblankerrormsg}"></span>
</p>
<button type="submit" class="btn btn-default">Lauf</button>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
Stellen Sie in diesem Status WAS Liberty bereit und probieren Sie es aus.
Aus irgendeinem Grund wird nur Nicht leer ausgeführt. .. ..
Versuchen Sie, dieselbe Anwendung auf Tomcat zu installieren. Ja, es funktioniert. .. .. Warum orz
Das Problem scheint zu sein, dass der Hibernate Validator vom WASLiberty-Klassenladeprogramm nicht erkannt wird. Durch Hinzufügen der folgenden validation.xml zu META-INF des Zielprojekts, um der Verwendung des Hibernate Validator Vorrang einzuräumen, wurde die Validierung erfolgreich ausgeführt. validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<validation-config
xmlns="http://jboss.org/xml/ns/javax/validation/configuration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration http://www.jboss.org/xml/ns/javax/validation/configuration/validation-configuration-1.0.xsd">
<default-provider>org.hibernate.validator.HibernateValidator</default-provider>
</validation-config>
Laden Sie diese Referenzanwendung als Referenz auf [Github] hoch (https://github.com/atu496/HibernateValidator-sample "Github"). Das Ereignis traf nicht leicht und ich schaffte es, es durch Versuch und Irrtum zu lösen, aber da ich viel Zeit mit dieser Untersuchung verbracht habe, möchte ich, dass Leute, die mit ähnlichen Ereignissen feststecken, darauf verweisen.
Recommended Posts