我正在尝试在我的电子商务网站中设置休眠验证。我有一个分配了多个对象的订单对象。当客户结账时,我希望能够单独验证这些对象——有时是多个对象与一个表单。
例如,在提交交付表单时,应该验证 deliveryCharge 和 deliveryAddress。如果此验证失败,将返回包含验证错误列表的交付表单。
我可以通过 java 实现来验证对象,但是当我尝试使用<form:error />标签在视图层上查看这些对象时,我什么也得不到。
订单模式
@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" />
  ...
非常感谢