[SPRING] Spring MVC 유효성 검사에서 한 번에 필드 당 하나의 오류 메시지 만 표시 할 수 있습니까?
SPRINGSpring MVC 유효성 검사에서 한 번에 필드 당 하나의 오류 메시지 만 표시 할 수 있습니까?
예,
나는 가지고있다
@NotEmpty //tells you 'may not be empty' if the field is empty
@Length(min = 2, max = 35) //tells you 'length must be between 2 and 35' if the field is less than 2 or greater than 35
private String firstName;
그런 다음 빈 값을 입력합니다.
그것은 말한다, '비어 있지 않을지도 모른다 길이는 2 ~ 35 '사이 여야합니다.
필드 당 한 번에 하나씩 유효성을 검사하도록 봄을 말할 수 있습니까?
해결법
-
==============================
1.가능합니다. 다음과 같이 자신 만의 주석을 작성하십시오.
가능합니다. 다음과 같이 자신 만의 주석을 작성하십시오.
@Documented @Constraint(validatedBy = {}) @Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE }) @Retention(RetentionPolicy.RUNTIME) @ReportAsSingleViolation @NotEmpty @Length(min = 2, max = 35) public @interface MyAnnotation { public abstract String message() default "{mypropertykey}"; public abstract Class<?>[] groups() default {}; public abstract Class<?>[] payload() default {}; }
중요한 부분은 @ReportAsSingleViolation 주석입니다.
-
==============================
2.필드에 사용자 지정 제약 조건을 사용하십시오. 예를 들어, annotate @StringField를 사용합니다.
필드에 사용자 지정 제약 조건을 사용하십시오. 예를 들어, annotate @StringField를 사용합니다.
@Target(ElementType.FIELD) @Constraint(validatedBy = StringFieldValidator.class) @Retention(RetentionPolicy.RUNTIME) public @interface StringField { String message() default "Wrong data of string field"; String messageNotEmpty() default "Field can't be empty"; String messageLength() default "Wrong length of field"; boolean notEmpty() default false; int min() default 0; int max() default Integer.MAX_VALUE; Class<?>[] groups() default {}; Class<?>[] payload() default {}; }
그런 다음 StringFieldValidator 클래스에서 일부 논리를 만듭니다. 이 클래스는 인터페이스 ConstraintValidator 에 의해 구현됩니다.
public class StringFieldValidator implements ConstraintValidator<StringField, String> { private Boolean notEmpty; private Integer min; private Integer max; private String messageNotEmpty; private String messageLength; @Override public void initialize(StringField field) { notEmpty = field.notEmpty(); min = field.min(); max = field.max(); messageNotBlank = field.messageNotEmpty(); messageLength = field.messageLength(); } @Override public boolean isValid(String value, ConstraintValidatorContext context) { context.disableDefaultConstraintViolation(); if (notEmpty && value.isEmpty()) { context.buildConstraintViolationWithTemplate(messageNotEmpty).addConstraintViolation(); return false; } if ((min > 0 || max < Integer.MAX_VALUE) && (value.length() < min || value.length() > max)) { context.buildConstraintViolationWithTemplate(messageLength).addConstraintViolation(); return false; } return true; } }
그런 다음 주석을 사용할 수 있습니다.
@StringField(notEmpty = true, min = 6, max = 64, messageNotEmpty = "Field can't be empty", messageLength = "Field should be 6 to 64 characters size")
결국 올바른 순서로 표시된 오류 메시지가 하나만 나타납니다.
-
==============================
3.더 나은 해결책은 오류 메시지에 마크 업을 사용하여
과 같이 멋지게 형식을 지정하고 CSS 클래스를 사용하여 전체 메시지를 형식화하는 것입니다. Bozho의 코멘트에서 언급했듯이, 사용자는 잘못된 모든 것을 알고 있어야합니다.더 나은 해결책은 오류 메시지에 마크 업을 사용하여
과 같이 멋지게 형식을 지정하고 CSS 클래스를 사용하여 전체 메시지를 형식화하는 것입니다. Bozho의 코멘트에서 언급했듯이, 사용자는 잘못된 모든 것을 알고 있어야합니다.
from https://stackoverflow.com/questions/7555201/in-spring-mvc-validation-is-it-possible-to-show-only-one-error-message-per-fiel by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트 및 JSF / Primefaces / Richfaces (0) | 2019.01.19 |
---|---|
[SPRING] Spring에서 Session Expiry 이전에 커스텀 이벤트 수행 (0) | 2019.01.19 |
[SPRING] 네이티브 쿼리를 사용하여 스프링 데이터에서 사용자 정의 객체 반환 (0) | 2019.01.19 |
[SPRING] Spring 3.2 날짜 시간 형식 (0) | 2019.01.19 |
[SPRING] Spring : 주석 기반 구성으로 원시 값 (속성)의 생성자 주입 (0) | 2019.01.19 |