2010-10-25 9 views
9

Attualmente sto usando i CSS per cambiare tutto ciò che scrivo in upperCase quando creo una voce, ma non è abbastanza. Quando salvi le cose, il testo mostrato nei campi di testo è maiuscolo, ma il valore reale che i negozi di Grails rimangono in minuscolo.Grails: Come creare tutto ciò che creo Upper Case?

Suppongo che avrei bisogno di cambiare qualcosa nel controller o altro.

Forse trasformando il $ fieldValue CSS potrebbe funzionare ??

Qualsiasi idea potrebbe aiutare!

Thnks!

risposta

19

Si può semplicemente scrivere setter per il proprio oggetto dominio?

class Domain { 
String aField 

void setAField(String s){ 
    aField = s?.toUpperCase() 
} 
} 
+0

lol, questo è molto più semplice di quello che mi è venuto in mente;) – hvgotcodes

+0

e avrei bisogno di farlo con ogni stringa giusto ?? – randomizertech

+1

@hvgotcodes;) la tua strada potrebbe essere più veloce se ci sono migliaia di proprietà :) o forse una sorta di httpfilter –

4

Penso che stiate chiedendo come modificare i valori degli oggetti del dominio in maiuscolo. Se questo non è il caso, chiarire la domanda.

Hai un sacco di opzioni. Vorrei raccomandare

1) In un metodo di servizio, prima di salvare, utilizzare String.toUpperCase() per modificare i valori appropriati sull'oggetto dominio.

o

2) È possibile utilizzare i sottostanti intercettori Hibernate definendo un metodo PrimaDiInserire sull'oggetto dominio, e facendo il toUpperCase lì. (Vedi 5.5.1 della documentazione graal)

o

3) Si potrebbe fare questo lato client. Tuttavia, se è un "requisito aziendale" che i valori siano memorizzati come superiori, ti consiglio di eseguire il lato server di traduzione. È più facile avvolgere i test attorno a quel codice ...

+0

Quale è più breve? La dimensione è una specie di problema – randomizertech

+0

@ fgualda87 - penso che le soluzioni di tim_yates siano migliori. e più breve – hvgotcodes

1

È possibile utilizzare metaprogrammazione Groovy per cambiare il setter per tutte le proprietà String tipizzato classe di dominio senza in realtà scrivere un setter personalizzato per ogni proprietà.

A tale scopo, aggiungere qualcosa di simile a quanto segue alla init chiusura di Bootstrap.groovy

def init = { servletContext -> 

     for (dc in grailsApplication.domainClasses) {   

     dc.class.metaClass.setProperty = { String name, value -> 

      def metaProperty = delegate.class.metaClass.getMetaProperty(name) 

      if (metaProperty) { 

       // change the property value to uppercase if it's a String property 
       if (value && metaProperty.type == String) { 
        value = value.toUpperCase() 
       } 

       metaProperty.setProperty(delegate, value) 
      } else { 
       throw new MissingPropertyException(name, delegate.class) 
      } 
     } 
     } 
    } 
+0

I parametri all'interno di for dovrebbero essere modificati al nome del mio dominio, giusto? – randomizertech

+0

no, 'dc' è solo una variabile locale e' grailsApplication 'è un oggetto implicito disponibile in 'Bootstrap.groovy', GSPs e probabilmente anche in altri posti.Penso che sia un'istanza di http://www.grails.org/doc/1.3.5/api/org/codehaus/groovy/grails/commons/GrailsApplication.html –

2

utilizzando le annotazioni è l'approccio più pulito

import org.grails.databinding.BindingFormat 
class Person { 
    @BindingFormat('UPPERCASE') 
    String someUpperCaseString 

    @BindingFormat('LOWERCASE') 
    String someLowerCaseString 
} 

Ecco collegamento per esso: Grails doc for data binding

Problemi correlati