2011-11-03 39 views
7

Tôi có một đối tượng.Số nguyên xác nhận chú thích mùa xuân mvc

public class MyObject 
{ 
    .... 
    @Column(name = "a_number") @NotNull @NumberFormat(style = Style.NUMBER) @Min(1) 
    private Integer aNumber; 
    ... 
    //getters and setters 
} 

Trong bộ điều khiển của tôi, tôi có chú thích @Valid trên đối tượng đang được đăng. Tôi có xác nhận làm việc trên tất cả các lĩnh vực khác của tôi trong lớp (tất cả các chuỗi của họ), ngoại trừ số này. Nếu tôi nhập một số từ mẫu của tôi, nó hoạt động tốt và nếu tôi vi phạm @Min (1) nó cũng sẽ cho tôi lỗi xác thực chính xác. Tuy nhiên, vấn đề của tôi là nếu bạn nhập một chuỗi thay vì một số thì nó sẽ ném ra một NumberFormatException.

Tôi đã xem nhiều ví dụ về Số nguyên và xác thực nhưng không có tài khoản nào nếu bạn nhập chuỗi vào biểu mẫu đang được đăng. Tôi có cần phải thực hiện xác nhận khác ở đâu không? Javascript? Tôi muốn một giải pháp phù hợp với phần còn lại của xác nhận mùa xuân để tôi có thể sử dụng nó trong các lớp khác. Tôi chỉ muốn một lỗi nói rõ nó phải là số. Ngoài ra tôi đã thử bằng cách sử dụng chú thích @Pattern nhưng dường như thats chỉ dành cho chuỗi.

Đề xuất?

+1

Xem http://stackoverflow.com/questions/4082924/jsr-303-type-checking-before-binding – axtavt

+0

Cảm ơn !! Làm việc pefect! Bài đăng của bạn không bao giờ xuất hiện trong tìm kiếm của tôi. – sauce

Trả lời

9

Bạn có thể thêm dòng sau vào tập tin của bạn mà kiểm soát các thông báo lỗi của bạn (đó là những cái chung chung nó sẽ xem xét trong trường hợp của một loại không phù hợp:

typeMismatch.commandObjectName.aNumber=You have entered an invalid number for ... 
typeMismatch.aNumber=You have entered an invalid number for ... 
typeMismatch.java.lang.Integer=You have input a non-numeric value into a field expecting a number... 
typeMismatch=You have entered incorrect data on this page. Please fix (Catches all not found) 
+0

đây chính xác là những gì tôi cần, cảm ơn! – sauce

3

Đối với những người đã không nhận được ý tưởng đúng đây là những việc cần làm trong spring 4.2.0. tạo một tên tập tin messages.properties trong WEB-INF > classes thư mục. Và đưa những thông điệp không phù hợp loại trên trong tập tin đó. trong cấu hình mùa xuân hoặc servlet.xml tập tin tạo ra đậu sau.

<beans:bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 
<beans:property name="basename" value="messages"></beans:property> 
</beans:bean> 

Và đối với thuộc tính mô hình của bạn như private Integer aNumber; trong câu hỏi cùng với các quy tắc xác thực khác, quy tắc này cũng được áp dụng cho loại chuyển đổi không khớp. Bạn sẽ nhận được tin nhắn mong muốn của bạn trong này.

<form:errors path="aNumber"></form:errors> 

Hy vọng nó sẽ giúp người khác.

Các vấn đề liên quan