1

我正在尝试使用 javax.validation 注释向我的模型对象(它兼作我的表单支持 bean)添加验证。

我的模型如下所示:

public Class TestObject {
    private String myProp;
    private InnerObject innerObject;

    //getters and setters omitted
}

public Class InnerObject {
  private BigDecimal myValue;

  @NotNull
  public BigDecimal getMyValue();
}

在我的控制器中,我有这样的方法调用:

public View calculate(@ModelAttribute("testObject") @Valid TestObject testObject, BindingResult result)

我的 spring-servlet.xml 文件中也有<mvc:annotation-driven/>

每次我使用空值运行表单时,它都会告诉我有 0 个绑定结果错误。

我在我的类路径上使用带有 Hibernate-Validator-4.2.0 和 Validation-API-1.0.0 的 Java 1.6。

谁能帮助我,让我知道我做错了什么?一直在玩这个,无法让它工作。

谢谢

4

3 回答 3

0

您没有引用您的 InnerObject 类。您的控制器正在使用 TestObject,但 TestObject 类的“innerObject”字段是 String 类型。

于 2011-04-25T17:59:12.707 回答
0

好的,在这个方面更进一步。我注意到我仍在控制器中使用自定义验证器,如下所示:

binder.setValidator(new CustomValidator());

所以我删除了它,然后在我的内部对象的 getter 上方添加了@Valid,例如:

@Valid
public InnerObject getInnerObject();

现在我可以看到我的代码中有绑定错误。不过我有一个新问题。我在 BigDecimal 属性上有 @NotNull 并且收到以下错误

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.validation.UnexpectedTypeException: No validator could be found for type: java.math.BigDecimal

从文档看来,BigDecimal 是受支持的。所以不确定发生了什么。我想我越来越近了。

于 2011-04-25T21:12:01.657 回答
0

确定解决我更改的 BigDecimal 错误:

private BigDecimal myField;

private BigDecimal myFeild = BigDecimal.Zero;

它现在可以正常工作。

唯一的缺点是,由于这些是我的表单支持对象,因此最初在字段中显示零而不是空白。

我不确定是否有任何解决方法?

于 2011-04-26T15:21:37.213 回答