Pregunta

Tengo un dominio objeto sobre el que quiero guardar un par de cosas que solo existen en tiempo de ejecución.Me miré en el documentación y encontró el transients palabra clave, la cual, en la cara de ella era lo que yo estaba buscando.Aquí es lo que mi objeto de dominio se parece a...

class Contact {

    def Seeker

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

    Date initiatedDate
    Date acceptedDate

    static transients = ['pal']
    Seeker pal
}

donde Seeker es una maravillosa clase que no es un objeto de dominio, pero un marcador de posición para algunas propiedades.

Hasta el momento, todo está bien y mi Contacto con la tabla no tiene un pal campo como se esperaba.En mi ContactController Me consulta por un montón de contactos, c, a continuación, buscar su Seeker pals (los detalles de cómo retener) y establecer el pal campo de un nuevo objeto.

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

Todo esto parece que funciona bien, excepto que el pal objeto de falta en el JSON devuelto.

Es este un uso válido de transitorios?El docs mencionar que son útiles para la función de base de getters y setters, pero en mi caso quiero un objeto real.Debería estar escribiendo un getPal() y setPal() método en mi objeto?

Gracias

¿Fue útil?

Solución

Los transitorios son en realidad utilizados para detener los campos en el dominio de los objetos se conservan.(Si desea realizar algunas init en el pal campo sin tener que ponerlo en el controlador podría utilizar el evento onLoad() o escribir un getPal() método que podría reemplazar el valor predeterminado de la propiedad de captador).Usted está también a la derecha tenga en cuenta que el valor predeterminado JSON contador de referencias sólo hace persistió campos.

Cuando la representación mis objetos de dominio he encontrado que es útil para crear un objeto JSON marshallers de modo que las propiedades no deseadas no son prestados, pero también a resolver su problema transitorio demasiado.Usted puede hacer esto usando el JSON.registerObjectMarshaller método:

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) {
            ...
        }

Si se agrega el marshallers en su arranque.groovy que estará disponible en los controladores.

HTH

(También encontrado esto: http://old.nabble.com/Taggable-plugin-and-JSON-converter-ts24830987.html#a24832970)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top