Domanda

Ho un oggetto di dominio su cui voglio conservare un paio di cose che esistono solo in fase di esecuzione. Ho guardato il e ho trovato la parola chiave transients, che , sulla faccia di esso era quello che stavo cercando. Ecco ciò che il mio oggetto di dominio sembra ...

class Contact {

    def Seeker

    def beforeInsert() 
    {
       initiatedDate = new Date()
    }

    Date initiatedDate
    Date acceptedDate

    static transients = ['pal']
    Seeker pal
}

dove Seeker è una classe Groovy, che non è un oggetto di dominio, ma un segnaposto per alcune proprietà.

Finora tutto va bene e la mia tabella di contatto non dispone di un campo pal come previsto. Nel mio ContactController interrogo per un gruppo di contatti, c, poi cercare i loro amici Seeker (dettagli su come trattenuta) e impostare il campo pal a un nuovo oggetto.

c.pal = new Seeker();
c.pal.name = otherObject.name
render c as JSON

Questo sembra tutto funzionare bene, tranne che l'oggetto PAL non è presente nel JSON restituito.

È questo un valido utilizzo di transitori? La documentazione parlare che sono a portata di mano per i getter e setter basati su funzioni, ma nel mio caso voglio un oggetto reale. Dovrei essere a scrivere un metodo getPal () e setPal () sul mio oggetto?

Grazie

È stato utile?

Soluzione

I transitori sono infatti utilizzati per smettere di campi in oggetti di dominio di essere persistente. (Se si desidera eseguire alcune init sul campo amico, senza dover mettere in vostro controller è possibile utilizzare l'evento onLoad () o scrivere un metodo getPal (), che sarebbe ignorare il getter proprietà predefinita). Lei è anche giusto notare che la marshaller JSON predefinita rende solo campi persistenti.

Quando il rendering i miei oggetti di dominio che ho trovato utile per creare marshaller oggetto JSON in modo che le proprietà indesiderate non sono resi, ma sarebbe anche risolvere il tuo problema temporaneo troppo. È possibile farlo utilizzando il metodo JSON.registerObjectMarshaller:

import grails.converters.JSON
...
class BootStrap {

    def init = {servletContext ->
        JSON.registerObjectMarshaller(Contact ) {
            def returnArray = [:]
            returnArray['id'] = it.id
            returnArray['initiatedDate'] = it.initiatedDate
            returnArray['acceptedDate'] = it.acceptedDate
            returnArray['pal'] = it.pal
            return returnArray
        }

        JSON.registerObjectMarshaller(Seeker) {
            ...
        }

Se si aggiungono i marshaller nel BootStrap.groovy saranno disponibili nei tuoi controller.

HTH

(che si trova anche questo: http: // old.nabble.com/Taggable-plugin-and-JSON-converter-ts24830987.html#a24832970 )

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top