2009-08-20 9 views
5

Il dottore di riferimento dice che il vincolo di dimensione:Usa vincolo dimensioni con Integer in Grails

utilizza una gamma Groovy per limitare la dimensione di una collezione o di numero o la lunghezza di una stringa.

Quando ho messo un vincolo dimensioni su un numero intero, ottengo un avvertimento

Proprietà [prop] della classe di dominio theClass è digitare [java.lang.Integer] e non supporta vincolo [dimensione]. Questo vincolo non verrà controllato durante la convalida.

Il documento è sbagliato?

So che potrei usare l'intervallo ma sarebbe generalmente più facile essere in grado di specificare la quantità di cifre nel numero piuttosto che il valore effettivo (come un numero di previdenza sociale deve avere 7 cifre o qualsiasi cosa sia, piuttosto che facendo un intervallo di 1000000 - 9999999).

risposta

2

Se si desidera che il numero di cifre, assicurarsi che sia positivo e ha una certa lunghezza:

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

era il 'ritorno necessario? –

1

È inoltre possibile utilizzare max per vincolare un numero intero come myIntProp (max: 9999999)

+1

Sarebbe come usare un intervallo. In genere sarebbe più semplice poter specificare la quantità di cifre nel numero anziché il valore effettivo (ad esempio un numero di previdenza sociale deve avere 7 cifre o qualsiasi cosa sia, piuttosto che fare un intervallo di 1000000 - 9999999). – Fletch

+0

Sarebbe più semplice se fosse possibile, ma non vedo come un validatore personalizzato sia più semplice di un intervallo o di un massimo. Un'altra cosa da considerare è che se si lavora con "numeri" come SSN o codici postali statunitensi che possono contenere zeri iniziali, potrebbe essere preferibile utilizzare comunque una stringa. Solo un pensiero. - Dave –

+1

Beh, c'è spazio per errori quando digiti 7 0 di fila, tutto qui. Tuttavia, probabilmente mi accontenterò di questo piuttosto che del validatore personalizzato che penso. Il punto di stringa è valido ... ma penso che sia tutto più facile usare un numero, e basta formattarlo per visualizzare una certa quantità di cifre (ad esempio includere gli zeri iniziali). – Fletch

2

I trovato la risposta durante la ricerca di JIRA: http://jira.codehaus.org/browse/GRAILS-947. Il documento è sbagliato.

Non abbiamo bisogno di minSize, maxSize e vincoli di formato per i campi numerici più in quanto questa funzionalità è in min, max e vincoli gamma rispettivo. Quindi contrassegniamo questi vincoli (solo per i campi numerici) come deprecati in 0.5 e lo rimuoverò in 0.6.

Sembra che sia compito del validatore personalizzato.

+2

"rimuovilo in 0.6" A partire da 2.1.1, questo è ancora lì. –

0

Come indicato nel collegamento Jira, penso che la risposta corretta per questo è utilizzare il vincolo range per i numeri interi.

Penso che sia una semplice sostituzione di size con range.