2012-02-15 16 views
11

voglio permettere solo interi positivi per i campi numerici tra cui zero.How posso definire questa convalida utilizzando JSR 303.
ho provatoConvalida interi positivi

  1. @Min(value=0 message = "msg1") - ma permette valori decimali come 1.2.

  2. @Digits(fraction = 0, integer = 10, message ="msg2") - Accetta valori negativi.

  3. @Min(value=0, message = "msg1")
    @Digits(fraction = 0, integer = 10, message ="msg2") - Funziona bene, ma a volte vengono visualizzati entrambi i messaggi cioè msg1 e msg2.

Qualche suggerimento?

Grazie!

+0

Qual è il motivo particolare non si utilizza un campo intero? – Perception

+0

@Perception: sto lavorando con un'applicazione legacy e non posso cambiarlo subito. – xyz

+0

Utilizzare un vincolo personalizzato? - http://nonrepeatable.blogspot.com/2010/05/creating-custom-jsr-303-constraint.html –

risposta

10

Sembra che tu stia cercando numeri naturali, penso che puoi usare il modello regex per ottenere l'output desiderato. Qualcosa di simile

@Pattern(regexp = "[\\s]*[0-9]*[1-9]+",message="msg")

+9

ma purtroppo non può essere applicata per intero – fmchan

+0

@fmchan per intero, non è '@ Min' la soluzione? Non vedo il punto in regexp per un numero intero – eis

12

Basta usare l'annotazione @Min nel fagiolo:

@Min(value = 0L, message = "The value must be positive") 
private Double value; 
2

Se si utilizza hibernate-validatore allora si può creare un vincolo personalizzato che combinano @Min e @Digits dal 3 ° opzione utilizzando @ConstraintComposition(AND). Quando aggiungerai @ReportAsSingleViolation, verrà mostrato solo il messaggio personalizzato.

1

suo meglio usare gamma di annotazione come qui di seguito per i numeri positivi

@Range(min = 0l, message = "Please select positive numbers Only") 

per i numeri negativi

@Range(min = -9223372036854775808l, max = 0l, message = "Please select Negative numbers Only") 
+2

Perché è meglio? – naXa