hibernate验证 - 验证两个路径之一

时间:2013-11-27 10:12:56

标签: validation spring-mvc polymorphism hibernate-validator

我使用Spring MVC和Hibernate Validator。我有一个OrderForm,您可以从中选择不同的付款方式。您有一个单选按钮,您可以在其中选择付款方式,并输入所选付款方式的相关参数。

当然,如果有人选择“直接付款”,我不希望在“PayPal”表单中出现验证错误。当时我这样做:

public class OrderForm
{
   @NotNull
   private Integer customerId
   private PaymentMethodDebitForm paymentMethodDebitForm;
   private PaymentMethodPayPalForm paymentMethodPayPalForm;
   private String paymentSelection;

   @Valid
   public PaymentForm getPaymentForm ( )
   {
      if (paymentSelection.equals("PayPal"))
      {
         return paymentMethodPayPalForm;
      }
      return paymentMethodDebitForm;
    }

这样验证器只获得所选付款方式的形式。

我有两个问题。

  1. Spring为此生成错误代码,其中包含抽象超类(“PaymentForm”)的名称,而不是concret类(“PaymentMethodDebitForm”)。当我在不同的地方使用这个表单作为具体的子类时,我得到两个不同的代码解析。我通过在表单中​​设置代码来解决这个问题:

    public class PaymentMethodDebitForm extends PaymentForm
    {
        @NotNull
        @Size(min = 3, max = 50, message = "{paymentMethodDebitForm.iban.Size}")
        private String iban;
    }
    
  2. 在我的jsp中,我需要在渲染输入字段时引用具体类,并在渲染错误时引用超类:

     <form:input path="paymentMethodDebitForm.iban" size="40" maxlength="50" />
     <form:errors path="paymentMethodForm.iban" />
    

    不太好。

  3. 如果使用spring / hibernate处理表单和验证,你如何处理多态?是否有一些建议如何处理这样的情况?

1 个答案:

答案 0 :(得分:1)

我想我会尝试通过<f:validateBean validationGroups="..." />使用验证组,或者我会将表格分开。这也在这里讨论 - Validating different Validation Groups JSF 2.0