2013-08-26 2 views
1

Я пытаюсь настроить Hibernate Validation на моем сайте электронной коммерции. У меня есть объект заказа с несколькими назначенными объектами. Когда клиент проходит проверку, я хочу иметь возможность индивидуально проверять эти объекты - иногда несколько объектов с одной формой.Пользовательские сообщения об ошибках в Hibernate Validation

Например, при отправке формы доставки необходимо отправить подтверждение доставки и доставки. Если эта проверка не удалась, форма доставки будет возвращена со списком ошибок проверки.

Я могу проверить объекты с помощью реализации 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"; 
} 

Validation Hibernate Validation Docs

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" /> 
    ... 

Большое спасибо

+0

Не могли бы вы переформулировать свой вопрос? Трудно сказать, что вы сейчас спрашиваете? – Hardy

ответ

1

Я думаю, что вы после это группы проверки. Они позволяют проверять различные наборы ограничений в несколько этапов.

Объявляют необходимые группы путем определения интерфейсов и назначить ограничения на одну или несколько групп:

public interface DeliveryChecks{} 
public interface PaymentChecks{} 

public class Address { 

    @NotNull(groups = PaymentChecks.class) 
    private Address payment; 

    @Min(value=5, groups = DeliveryChecks.class) 
    private Integer deliveryCharge; 
    ... 
} 

затем подтвердить требуемую группу (ы) для каждой формы или страницы путем передачи идентификаторов групп для validate():

Set<ConstraintViolation<Address>> constraintViolations = 
    validator.validate(address, PaymentChecks.class); 

У Hibernate Validator reference guide есть дополнительная информация по этой теме.

+0

Это не совсем то, чем я был после, но это довольно приличный способ соединить их (я ранее проверял отдельно, а затем объединял ошибки вместе). Можно ли это скомбинировать с http://www.mkyong.com/spring-mvc/spring-3-mvc-and-jsr303-valid-example/? ура – Toby

Смежные вопросы