我正在尝试使用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。
有没有人可以帮助我,让我知道我做错了什么?我已经玩了一段时间了,还不能让它工作。
谢谢
发布于 2011-04-26 23:21:37
确定以解决我更改的BigDecimal错误:
private BigDecimal myField;至
private BigDecimal myFeild = BigDecimal.Zero;现在可以正常工作了。
唯一的缺点是,因为这些是我的表单支持对象,所以最初在字段中显示的是零而不是空白。
我不确定有没有办法解决这个问题?
发布于 2011-04-26 01:59:13
您没有引用您的InnerObject类。您的控制器接受一个TestObject,但是类TestObject的字段"innerObject“是String类型。
发布于 2011-04-26 05:12:02
好的,让我们再深入一点。我注意到我仍然在我的控制器中使用一个自定义验证器,如下所示:
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。所以不确定到底是怎么回事。不过,我觉得我越来越接近了。
https://stackoverflow.com/questions/5781200
复制相似问题