2009-08-20 7 views
5

Le document de référence indique que la contrainte de taille:Utiliser la taille contrainte avec Integer dans Grails

utilise une gamme Groovy pour limiter la taille d'une collection ou un numéro ou la longueur d'une chaîne.

Quand je mets une contrainte de taille sur un nombre entier, je reçois un avertissement

Propriété [prop] de classe de domaine theClass est de type [java.lang.Integer] et ne supporte pas la contrainte [Taille]. Cette contrainte ne sera pas vérifiée pendant la validation.

Le document est-il incorrect? Je sais que je pourrais utiliser la plage, mais il serait généralement plus facile de spécifier la quantité de chiffres dans le nombre plutôt que la valeur réelle (comme un numéro de sécurité sociale doit avoir 7 chiffres ou quoi que ce soit, plutôt que en faisant une gamme de 1000000 - 9999999).

Répondre

2

Si vous voulez que le nombre de chiffres, assurez-vous qu'il est positif et a une certaine longueur:

myInteger(validator: { 
    return it > 0 && (it.toString.length) == 7 
}) 
+0

était le «retour» nécessaire? –

1

Vous pouvez également utiliser max pour contraindre un entier comme myIntProp (max: 9999999)

+1

Ce serait comme utiliser une gamme. Il serait généralement plus facile de spécifier le nombre de chiffres dans le nombre plutôt que la valeur réelle (comme un numéro de sécurité sociale doit avoir 7 chiffres ou quoi que ce soit, plutôt que de faire une gamme de 1000000 - 9999999). – Fletch

+0

Ce serait plus simple si c'était possible, mais je ne vois pas comment un validateur personnalisé est plus facile qu'une gamme ou un max. Une autre chose à considérer est que si vous travaillez avec des «numéros» comme les codes postaux SSN ou US qui peuvent contenir des zéros, il est préférable d'utiliser une chaîne de toute façon. Juste une pensée. - Dave –

+1

Eh bien, il y a place à l'erreur quand vous tapez 7 0 dans une rangée, c'est tout. Néanmoins je vais probablement me contenter de cela plutôt que du validateur personnalisé je pense. Le point String est valide ... mais je pense qu'il est plus facile d'utiliser un nombre et de le formater pour afficher un certain nombre de chiffres (c'est-à-dire inclure des zéros en tête). – Fletch

2

I trouvé la réponse lors de la recherche JIRA: http://jira.codehaus.org/browse/GRAILS-947. Le doc est faux.

Nous ne avons pas besoin minSize, maxSize et contraintes de taille pour les champs numériques plus puisque cette fonctionnalité est sur min, max et les contraintes de portée respective. Donc nous marquons ces contraintes (pour les champs numériques seulement) comme obsolète en 0.5 et nous allons l'enlever en 0.6.

On dirait que c'est au validateur personnalisé.

+2

"l'enlever en 0.6" Depuis le 2.1.1, c'est toujours là. –

0

Comme vous l'avez souligné dans votre lien Jira, je pense que la réponse correcte pour cela est d'utiliser la contrainte range pour les entiers. Je pense que c'est un simple remplacement size avec range.

Questions connexes