mirror of
https://github.com/dalbodeule/snap-admin.git
synced 2025-06-08 21:38:21 +00:00
Showing validation errors field by field
This commit is contained in:
parent
8b88475d8a
commit
13b45e62b8
@ -58,6 +58,7 @@ import tech.ailef.dbadmin.external.dto.FacetedSearchRequest;
|
|||||||
import tech.ailef.dbadmin.external.dto.LogsSearchRequest;
|
import tech.ailef.dbadmin.external.dto.LogsSearchRequest;
|
||||||
import tech.ailef.dbadmin.external.dto.PaginatedResult;
|
import tech.ailef.dbadmin.external.dto.PaginatedResult;
|
||||||
import tech.ailef.dbadmin.external.dto.QueryFilter;
|
import tech.ailef.dbadmin.external.dto.QueryFilter;
|
||||||
|
import tech.ailef.dbadmin.external.dto.ValidationErrorsContainer;
|
||||||
import tech.ailef.dbadmin.external.exceptions.DbAdminException;
|
import tech.ailef.dbadmin.external.exceptions.DbAdminException;
|
||||||
import tech.ailef.dbadmin.external.exceptions.DbAdminNotFoundException;
|
import tech.ailef.dbadmin.external.exceptions.DbAdminNotFoundException;
|
||||||
import tech.ailef.dbadmin.external.exceptions.InvalidPageException;
|
import tech.ailef.dbadmin.external.exceptions.InvalidPageException;
|
||||||
@ -450,8 +451,9 @@ public class DefaultDbAdminController {
|
|||||||
attr.addFlashAttribute("error", e.getMessage());
|
attr.addFlashAttribute("error", e.getMessage());
|
||||||
attr.addFlashAttribute("params", params);
|
attr.addFlashAttribute("params", params);
|
||||||
} catch (ConstraintViolationException e) {
|
} catch (ConstraintViolationException e) {
|
||||||
attr.addFlashAttribute("errorTitle", "Unable to INSERT row (no changes applied)");
|
attr.addFlashAttribute("errorTitle", "Unable to INSERT row (validation error)");
|
||||||
attr.addFlashAttribute("error", e.toString());
|
attr.addFlashAttribute("error", "See below for details");
|
||||||
|
attr.addFlashAttribute("validationErrors", new ValidationErrorsContainer(e));
|
||||||
attr.addFlashAttribute("params", params);
|
attr.addFlashAttribute("params", params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -474,8 +476,9 @@ public class DefaultDbAdminController {
|
|||||||
attr.addFlashAttribute("error", e.getMessage());
|
attr.addFlashAttribute("error", e.getMessage());
|
||||||
attr.addFlashAttribute("params", params);
|
attr.addFlashAttribute("params", params);
|
||||||
} catch (ConstraintViolationException e) {
|
} catch (ConstraintViolationException e) {
|
||||||
attr.addFlashAttribute("errorTitle", "Unable to INSERT row (no changes applied)");
|
attr.addFlashAttribute("errorTitle", "Unable to INSERT row (validation error)");
|
||||||
attr.addFlashAttribute("error", e.toString());
|
attr.addFlashAttribute("error", "See below for details");
|
||||||
|
attr.addFlashAttribute("validationErrors", new ValidationErrorsContainer(e));
|
||||||
attr.addFlashAttribute("params", params);
|
attr.addFlashAttribute("params", params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -490,8 +493,9 @@ public class DefaultDbAdminController {
|
|||||||
attr.addFlashAttribute("error", e.getMessage());
|
attr.addFlashAttribute("error", e.getMessage());
|
||||||
attr.addFlashAttribute("params", params);
|
attr.addFlashAttribute("params", params);
|
||||||
} catch (ConstraintViolationException e) {
|
} catch (ConstraintViolationException e) {
|
||||||
attr.addFlashAttribute("errorTitle", "Unable to INSERT row (no changes applied)");
|
attr.addFlashAttribute("errorTitle", "Unable to INSERT row (validation error)");
|
||||||
attr.addFlashAttribute("error", e.toString());
|
attr.addFlashAttribute("error", "See below for details");
|
||||||
|
attr.addFlashAttribute("validationErrors", new ValidationErrorsContainer(e));
|
||||||
attr.addFlashAttribute("params", params);
|
attr.addFlashAttribute("params", params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
28
src/main/java/tech/ailef/dbadmin/external/dto/ValidationErrorsContainer.java
vendored
Normal file
28
src/main/java/tech/ailef/dbadmin/external/dto/ValidationErrorsContainer.java
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
package tech.ailef.dbadmin.external.dto;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import jakarta.validation.ConstraintViolation;
|
||||||
|
import jakarta.validation.ConstraintViolationException;
|
||||||
|
|
||||||
|
public class ValidationErrorsContainer {
|
||||||
|
private Map<String, List<ConstraintViolation<?>>> errors = new HashMap<>();
|
||||||
|
|
||||||
|
public ValidationErrorsContainer(ConstraintViolationException e) {
|
||||||
|
e.getConstraintViolations().forEach(c -> {
|
||||||
|
errors.putIfAbsent(c.getPropertyPath().toString(), new ArrayList<>());
|
||||||
|
errors.get(c.getPropertyPath().toString()).add(c);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ConstraintViolation<?>> forField(String name) {
|
||||||
|
return errors.getOrDefault(name, new ArrayList<>());
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return errors.isEmpty();
|
||||||
|
}
|
||||||
|
}
|
@ -1,3 +1,7 @@
|
|||||||
|
.text-red {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
|
||||||
.separator-light {
|
.separator-light {
|
||||||
opacity: 25%;
|
opacity: 25%;
|
||||||
}
|
}
|
||||||
|
@ -57,6 +57,10 @@
|
|||||||
"></th:block>
|
"></th:block>
|
||||||
|
|
||||||
</th:block>
|
</th:block>
|
||||||
|
<ul class="text-red mt-2" th:if="${validationErrors != null && !validationErrors.isEmpty()}">
|
||||||
|
<li th:each="error : ${validationErrors.forField(field.getName())}"
|
||||||
|
th:text="${error.getMessage()}"></li>
|
||||||
|
</ul>
|
||||||
<div class="separator mt-3 mb-2 separator-light"></div>
|
<div class="separator mt-3 mb-2 separator-light"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user