2012-03-07 32 views
8

Tôi đã sử dụng trình xác thực với các đối tượng sao lưu và chú thích trong Spring MVC (@Validate). Nó hoạt động tốt.Sử dụng Trình xác nhận mùa xuân bên ngoài ngữ cảnh của Spring MVC

Bây giờ tôi đang cố gắng hiểu chính xác cách hoạt động với hướng dẫn sử dụng Spring bằng cách triển khai Xác thực của riêng tôi. Tôi không chắc chắn làm thế nào để "sử dụng" validator của tôi.

My Validator:

import org.springframework.validation.Errors; 
import org.springframework.validation.ValidationUtils; 
import org.springframework.validation.Validator; 

import com.myartifact.geometry.Shape; 

public class ShapeValidator implements Validator { 

@SuppressWarnings("rawtypes") 
public boolean supports(Class clazz) { 
    return Shape.class.equals(clazz); 
} 

public void validate(Object target, Errors errors) { 
    ValidationUtils.rejectIfEmpty(errors, "x", "x.empty"); 
    ValidationUtils.rejectIfEmpty(errors, "y", "y.empty"); 
    Shape shape = (Shape) target; 
    if (shape.getX() < 0) { 
     errors.rejectValue("x", "negativevalue"); 
    } else if (shape.getY() < 0) { 
     errors.rejectValue("y", "negativevalue"); 
    } 
} 
} 

Lớp Shape mà tôi tìm cách xác nhận:

public class Shape { 

protected int x, y; 

public Shape(int x, int y) { 
    this.x = x; 
    this.y = y; 
} 

public Shape() {} 

public int getX() { 
    return x; 
} 

public void setX(int x) { 
    this.x = x; 
} 

public int getY() { 
    return y; 
} 

public void setY(int y) { 
    this.y = y; 
} 
} 

phương pháp chính:

public class ShapeTest { 

public static void main(String[] args) { 
    ShapeValidator sv = new ShapeValidator(); 
    Shape shape = new Shape(); 

    //How do I create an errors object? 
    sv.validate(shape, errors); 
} 
} 

Kể từ khi lỗi chỉ là một giao diện, tôi có thể' t thực sự nhanh chóng nó giống như một lớp học bình thường. Làm cách nào để thực sự "sử dụng" trình xác thực của tôi để xác nhận rằng hình dạng của tôi là hợp lệ hoặc không hợp lệ?

Lưu ý phụ, hình dạng này nên không hợp lệ vì thiếu dấu x và y.

Trả lời

19

Tại sao bạn không sử dụng triển khai mà mùa xuân cung cấp org.springframework.validation.MapBindingResult?

Bạn có thể làm:

Map<String, String> map = new HashMap<String, String>(); 
MapBindingResult errors = new MapBindingResult(map, Shape.class.getName()); 

ShapeValidator sv = new ShapeValidator(); 
Shape shape = new Shape(); 
sv.validate(shape, errors); 

System.out.println(errors); 

này sẽ in ra tất cả những gì trong các thông báo lỗi.

Chúc may mắn

+3

Điều này làm việc như một sự quyến rũ! Tôi chỉ mong rằng tài liệu sẽ cho thấy cách thức hoạt động ngay khi khái niệm xác nhận đầu tiên xuất hiện ... – Harry

+4

Bạn có thể vui lòng cho biết tại sao chúng ta cần đối số thứ hai, Shape.class.getName()? –

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