2012-03-07 18 views
8

Ho usato validatori con oggetti di supporto e annotazioni in Spring MVC (@Validate). Ha funzionato bene.Utilizzo di Spring Validator al di fuori del contesto di Spring MVC

Ora sto cercando di capire esattamente come funziona con il manuale Spring implementando il mio Validate. Non sono sicuro di come "utilizzare" il mio validatore.

mio 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"); 
    } 
} 
} 

La classe Shape che cerco di convalidare:

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; 
} 
} 

metodo Main:

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); 
} 
} 

Dal errori è solo un'interfaccia, posso' lo istanziamo davvero come una classe ordinaria. In che modo effettivamente "uso" il mio validatore per confermare che la mia forma è valida o non valida?

Su una nota a margine, questa forma deve essere non valida poiché manca un x e un y.

risposta

19

Perché non si utilizza l'implementazione che offre la primavera org.springframework.validation.MapBindingResult?

si può fare:

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); 

questo stampa tutto ciò che è nei messaggi di errore.

Buona fortuna

+3

Questo ha funzionato come un fascino! Spero solo che la documentazione mostrerà come funziona correttamente quando appare il concetto di convalida ... – Harry

+4

Puoi dirmi perché abbiamo bisogno del secondo argomento, Shape.class.getName()? –

Problemi correlati