我使用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;
}
这样验证器只获得所选付款方式的形式。
我有两个问题。
Spring为此生成错误代码,其中包含抽象超类(“PaymentForm”)的名称,而不是concret类(“PaymentMethodDebitForm”)。当我在不同的地方使用这个表单作为具体的子类时,我得到两个不同的代码解析。我通过在表单中设置代码来解决这个问题:
public class PaymentMethodDebitForm extends PaymentForm
{
@NotNull
@Size(min = 3, max = 50, message = "{paymentMethodDebitForm.iban.Size}")
private String iban;
}
在我的jsp中,我需要在渲染输入字段时引用具体类,并在渲染错误时引用超类:
<form:input path="paymentMethodDebitForm.iban" size="40" maxlength="50" />
<form:errors path="paymentMethodForm.iban" />
不太好。
如果使用spring / hibernate处理表单和验证,你如何处理多态?是否有一些建议如何处理这样的情况?
答案 0 :(得分:1)
我想我会尝试通过<f:validateBean validationGroups="..." />
使用验证组,或者我会将表格分开。这也在这里讨论 - Validating different Validation Groups JSF 2.0