2011-03-07 27 views
11

Xin lỗi nếu câu hỏi này đã được đề cập ở đâu đó trước đây. Nếu nó có xin vui lòng liên kết tôi với nó, tôi đã không thể tìm thấy một câu trả lời thỏa đáng như được nêu ra.Làm cho thông báo lỗi xác thực javax cụ thể hơn

Tôi đã xem xét tìm cách để có thông báo lỗi được cung cấp bởi xác thực javax cụ thể hơn.

Thông điệp Tôi hiện đang có cho chú thích @Min của tôi được quy định trong ValidationMessages.properties file:

javax.validation.constraints.Min.message=The value of this variable must be less than {value}. 

và điều này sẽ in ra như được mong đợi

The value of this variable must be less than 1 

Những gì tôi muốn có là thông điệp cũng bao gồm tên của biến (và lớp) đã thất bại trong việc xác thực cũng như giá trị của biến không thành công. Vì vậy, nhiều hơn như thế.

The value of class.variable was 0 but not must be less than 1 

Mọi trợ giúp sẽ được đánh giá cao.

Klee

Trả lời

13

Hmmm. Làm phiền! Như tôi đã nhìn thấy nó, bạn có 3 lựa chọn:

  1. Bạn có thể viết một tùy chỉnh MessageInterpolator và thay thế nó vào cấu hình xác nhận của bạn, nhưng đó là dường như thực sự giòn.

  2. Bạn có thể tuyên bố chú thích riêng của bạn in-the-phong cách của @Min (see how to do a custom validator here) ...

  3. .. Nhưng thông tin mà bạn cần thực sự là tổ chức trong đối tượng ConstraintViolation mà đi ra của Ví dụ về trình xác thực. Nó chỉ là nó không được đưa vào tin nhắn mặc định.

Tôi đoán bạn hiện đang sử dụng một số loại khung web để xác thực biểu mẫu. Nếu trường hợp đó xảy ra, sẽ khá đơn giản để ghi đè xác thực và thực hiện điều này (phiên bản hack nhanh), bạn sẽ có thể làm điều này rất gọn gàng bằng cách sử dụng tệp thuộc tính bên ngoài):

 
    Set<ConstraintViolation<MyForm>> violations = validator.validate(form); 
    for (ConstraintViolation<MyForm> cv : violations) { 
    Class<?> annoClass = cv.getConstraintDescriptor().getAnnotation().getClass(); 
    if (Min.class.isAssignableFrom(annoClass)) { 
     String errMsg = MessageFormat.format(
     "The value of {0}.{1} was: {2} but must not be less than {3}", 
     cv.getRootBeanClass(), 
     cv.getPropertyPath().toString(), 
     cv.getInvalidValue(), 
     cv.getConstraintDescriptor().getAttributes().get("value")); 
      // Put errMsg back into the form as an error 
    } 
    } 
1

Tôi tin rằng bạn cần tạo ràng buộc tùy chỉnh.
Bạn chưa đề cập đến việc triển khai đặc tả nào bạn đang sử dụng, nhưng có tài liệu hướng dẫn tốt về cách tạo ràng buộc tùy chỉnh cho Trình xác thực Hibernate here.

Một phần của quy trình sẽ liên quan đến việc tạo tệp ValidationMessages.properties của riêng bạn

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