1

I am trying to add validation to my model objects (which double as my form backing beans) using javax.validation annotations.

My model looks like this:

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

    //getters and setters omitted
}

public Class InnerObject {
  private BigDecimal myValue;

  @NotNull
  public BigDecimal getMyValue();
}

In my controller I have the method call like this:

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

I also have the <mvc:annotation-driven/> in my spring-servlet.xml file.

Everytime I run the form with a null value it tells me there are 0 binding result errors.

I am using Java 1.6 with Hibernate-Validator-4.2.0 and Validation-API-1.0.0 on my classpath.

Can anyone help me and let me know what I am doing wrong? Been playing around with this for a while and can't get it to work.

Thanks

4

3 に答える 3

0

わかりました、これでもう少し進んでください。私はまだ次のようにコントローラーでカスタムバリデーターを使用していることに気づきました。

binder.setValidator(new CustomValidator());

そこで、それを削除してから、次のように内部オブジェクトのゲッターの上に@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エラーを解決するためにOK:

private BigDecimal myField;

private BigDecimal myFeild = BigDecimal.Zero;

現在は正常に動作しています。

唯一の欠点は、これらは私のフォーム バッキング オブジェクトであるため、最初は空白ではなくゼロがフィールドに表示されることです。

これを回避する方法があるかどうかわかりませんか?

于 2011-04-26T15:21:37.213 に答える
0

InnerObject クラスを参照していません。コントローラは TestObject を取得していますが、クラス TestObject のフィールド「innerObject」は String 型です。

于 2011-04-25T17:59:12.707 に答える