2012-02-15 87 views
11

que quieren permitir sólo enteros positivos para los campos numéricos incluyendo zero.How puedo definir esta validación usando JSR 303.
ProbéValidar números enteros positivos

  1. @Min(value=0 message = "msg1") - pero permite valores de coma flotante como 1.2.

  2. @Digits(fraction = 0, integer = 10, message ="msg2") - Acepta valores negativos.

  3. @Min(value=0, message = "msg1")
    @Digits(fraction = 0, integer = 10, message ="msg2") - Funciona bien, pero a veces se muestran tanto los mensajes es decir, msg1 y msg2.

¿Alguna sugerencia?

Gracias!

+0

alguna razón en particular que no está utilizando un campo entero? – Perception

+0

@Perception: estoy trabajando con una aplicación heredada y no puedo cambiarla ahora mismo. – xyz

+0

¿Usa una restricción personalizada? - http://nonrepeatable.blogspot.com/2010/05/creating-custom-jsr-303-constraint.html –

Respuesta

10

Parece que está buscando números naturales, creo que puede usar el patrón de expresiones regulares para obtener el resultado deseado. Algo así como

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

+9

pero lamentablemente no se puede aplicar al número entero – fmchan

+0

@fmchan para entero, ¿no es '@ Min' la solución? No veo el punto en la expresión regular para un entero – eis

12

Sólo tiene que utilizar la anotación @Min en el bean:

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

Si utiliza hibernación-validador entonces puede crear una restricción a medida que se combinan @Min y @Digits de la tercera opción por usando @ConstraintComposition(AND). Cuando agregue @ReportAsSingleViolation, solo se mostrará un mensaje personalizado.

1

Su mejor utilizar la anotación de gama, como a continuación para los números positivos

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

Para los números negativos

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

¿Por qué es mejor? – naXa

Cuestiones relacionadas