e コマース サイトで Hibernate Validation をセットアップしようとしています。複数のオブジェクトが割り当てられた注文オブジェクトがあります。顧客がチェックアウトするときに、これらのオブジェクトを個別に検証できるようにしたいと考えています。1 つのフォームで複数のオブジェクトを検証することもあります。
たとえば、配送フォームの送信時に、deliveryCharge と deliveryAddress を検証する必要があります。この検証が失敗した場合、配信フォームは検証エラーのリストとともに返されます。
<form:error />
Java 実装を介してオブジェクトを検証できますが、タグを使用してビュー層でこれらを表示しようとすると、何も得られません。
注文モデル
@Entity
@Table(name = "bees_address")
public class Address {
@OneToOne
@JoinColumn(name = "paymentAddress")
private Address payment;
@OneToOne
@JoinColumn(name = "deliveryAddress")
private Address payment;
@Column(name = "deliveryCharge")
private Integer deliveryCharge;
...
アドレス モデル
@Entity
@Table(name = "bees_address")
public class Address {
@Size(min=2, max=150)
@Column(name = "line1", length = 150)
private String line1;
...
コントローラ
public String updateDelivery(HttpServletRequest request, @ModelAttribute("basket") Order basketUpdate) {
Address deliveryAddress = basketUpdate.getDeliveryAddress();
if (!Validate.isValid(request, deliveryAddress)) {
logger.info("Delivery address does not validate");
return "redirect:/checkout/delivery";
} else {
/* do stuff here */
}
return "redirect:/checkout/payment";
}
public static Boolean isValid(HttpServletRequest request, Address address) {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<Address>> constraintViolations = validator.validate(address);
request.getSession().setAttribute("formErrors", constraintViolations);
return constraintViolations.size() < 1;
}
JSP 構造
<form:form action="${url}" method="post" modelAttribute="basket"
Charge: <form:input path="deliveryCharge" />
Address: <form:input path="deliveryAddress.line1" />
<form:error path="deliveryAddress.line1" />
...
どうもありがとう