[SPRING] JSR-303 @Valid 주석 (중첩 된 객체)이 작동하지 않음
SPRINGJSR-303 @Valid 주석 (중첩 된 객체)이 작동하지 않음
[봄 3.0.5] [Jboss 5.1]
내 주요 수업은
public class UserAddressesForm {
@NotEmpty
private String firstName;
@NotEmpty
private String lastName;
private List<AddressForm> addresses;
...
setters and getters
public class AddressForm {
@NotEmpty
private String customName;
@NotEmpty
private String city;
@NotEmpty
private String streetAn;
@NotEmpty
private String streetHn;
@NotEmpty
private String addressCountry;
@NotEmpty
private String postCode;
...
setters and getters
컨트롤러
@RequestMapping(value = "/up", method = RequestMethod.POST)
public String completeForm(@Valid @ModelAttribute("userAddressesForm") UserAddressesForm userAddressesForm,
BindingResult result, HttpServletRequest req)
...
JSP 페이지
<form:form commandName="userAddressesForm" action="registered">
<table>
<tr>
<td class="formLabels"><form:label path="firstName">
<spring:message code="label.name" />
</form:label></td>
<td><form:input path="firstName" /></td>
<td><form:errors path="firstName" cssClass="error" /></td>
</tr>
<tr>
<td class="formLabels"><form:label path="lastName">
<spring:message code="label.surname" />
</form:label></td>
<td><form:input path="lastName" /></td>
<td><form:errors path="lastName" cssClass="error" /></td>
</tr>
</table>
<c:forEach items="${userAddressesForm.addresses}" varStatus="gridRow">
<div id="main_address" class="address_data_form">
<fieldset>
<legend><spring:message code="label.stepThreeMainAddressInfo" /></legend>
<a href="#" class="deleteItem"></a>
<table>
<tr>
<td class="formLabels">
<spring:message code="label.address.custom.name" />
</td>
<td>
<spring:bind path="addresses[${gridRow.index}].customName">
<input type="input" name="<c:out value="${status.expression}"/>"
id="<c:out value="${status.expression}"/>"
value="<c:out value="${status.value}"/>" />
<form:errors path="${status.expression}"/>
</spring:bind>
</td>
</tr>
<tr>
<td class="formLabels">
<spring:message code="label.streetAnStreetHn" />
</td>
<td>
<spring:bind path="addresses[${gridRow.index}].streetAn">
<input type="input" name="<c:out value="${status.expression}"/>"
id="<c:out value="${status.expression}"/>"
value="<c:out value="${status.value}"/>" />
</spring:bind>
<spring:bind path="addresses[${gridRow.index}].streetHn">
<input type="input" name="<c:out value="${status.expression}"/>"
id="<c:out value="${status.expression}"/>"
value="<c:out value="${status.value}"/>" >
<form:errors path="addresses[${gridRow.index}].streetHn"/>
</spring:bind>
</td>
</tr>
<tr>
<td class="formLabels">
<spring:message code="label.postCode" />
</td>
<td>
<spring:bind path="addresses[${gridRow.index}].postCode">
<input type="input" name="<c:out value="${status.expression}"/>"
id="<c:out value="${status.expression}"/>"
value="<c:out value="${status.value}"/>" />
</spring:bind>
</td>
</tr>
<tr>
<td class="formLabels">
<spring:message code="label.city" />
</td>
<td>
<spring:bind path="addresses[${gridRow.index}].city">
<input type="input" name="<c:out value="${status.expression}"/>"
id="<c:out value="${status.expression}"/>"
value="<c:out value="${status.value}"/>" />
<form:errors path="addresses[${gridRow.index}].city" cssClass="error" />
</spring:bind>
</td>
</tr>
</table>
</fieldset>
</div>
</c:forEach>
왜 객체 필드가 유효하지 않은 AddressForm입니까?
도와주세요.
해결법
-
==============================
1.UserAddressesForm의 주소 member를 @Valid 주석으로 꾸밀 필요가 있습니다. JSR 303 : Bean 유효성 검사의 3.1.3 및 3.5.1 절을 참조하십시오. 질문에 대한 내 대답에서 설명했듯이 주석이 달린 메소드를 사용하여 JSR 303 Bean Validation을 활성화하는 표준 방법이 있는가? 이것은 JSR 303에 따라 @Valid 주석을 실제로 사용하는 것입니다.
UserAddressesForm의 주소 member를 @Valid 주석으로 꾸밀 필요가 있습니다. JSR 303 : Bean 유효성 검사의 3.1.3 및 3.5.1 절을 참조하십시오. 질문에 대한 내 대답에서 설명했듯이 주석이 달린 메소드를 사용하여 JSR 303 Bean Validation을 활성화하는 표준 방법이 있는가? 이것은 JSR 303에 따라 @Valid 주석을 실제로 사용하는 것입니다.
편집하다 예제 코드 : Hibernate Validator- Object Graph. (승용차 목록)
-
==============================
2.@Ritesh 대답에 @Valid 제약 조건을 추가하면 Bean Validator가 적용된 속성의 유형을 파헤 치고 거기에있는 모든 제약 조건의 유효성을 검사하도록 지시합니다. 주소 속성에 대한 @Valid 제약 조건을 볼 때 코드에 대한 질문에 응답자가 응답하면 AddressForm 클래스를 탐색하고 내부에서 발견되는 모든 JSR 303 제약 조건을 다음과 같이 확인합니다.
@Ritesh 대답에 @Valid 제약 조건을 추가하면 Bean Validator가 적용된 속성의 유형을 파헤 치고 거기에있는 모든 제약 조건의 유효성을 검사하도록 지시합니다. 주소 속성에 대한 @Valid 제약 조건을 볼 때 코드에 대한 질문에 응답자가 응답하면 AddressForm 클래스를 탐색하고 내부에서 발견되는 모든 JSR 303 제약 조건을 다음과 같이 확인합니다.
public class UserAddressesForm { @NotEmpty private String firstName; @NotEmpty private String lastName; @Valid private List<AddressForm> addresses; ... setters and getters public class AddressForm { @NotEmpty private String customName; @NotEmpty private String city; @NotEmpty private String streetAn; @NotEmpty private String streetHn; @NotEmpty private String addressCountry; @NotEmpty private String postCode; ... setters and getters
from https://stackoverflow.com/questions/5142065/jsr-303-valid-annotation-nested-object-not-working by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄 한정자 및 속성 자리 표시 자 (0) | 2018.12.10 |
---|---|
[SPRING] 예외 발생 : 'springSecurityFilterChain'이라는 bean을 정의하지 않았습니다. (0) | 2018.12.10 |
[SPRING] Spring logging DEBUG 메시지를 비활성화하는 방법은 무엇입니까? (0) | 2018.12.10 |
[SPRING] @Foo 커스텀 어노테이션으로 모든 빈을 어떻게 찾을 수 있습니까? (0) | 2018.12.10 |
[SPRING] 스프링 3.1이있는 Jackson 2.0 (0) | 2018.12.10 |