代码之家  ›  专栏  ›  技术社区  ›  Simon

这是Grails瞬态的有效用法吗?

  •  4
  • Simon  · 技术社区  · 16 年前

    我有一个域对象,我想在其中存储一些只在运行时存在的东西。我看了看报纸 documentation transients 关键字,从表面上看,这就是我要找的。下面是我的域对象的外观。。。

    class Contact {
    
        def Seeker
    
        def beforeInsert() 
        {
           initiatedDate = new Date()
        }
    
        Date initiatedDate
        Date acceptedDate
    
        static transients = ['pal']
        Seeker pal
    }
    

    哪里 Seeker

    到目前为止,一切都很好,我的联系方式没有问题 pal 字段如预期的那样。在我的 ContactController c ,然后查阅他们的 探索者 朋友 字段添加到新对象。

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

    除了返回的JSON中缺少pal对象之外,这一切似乎都很好。

    这是瞬态的有效使用吗?文档提到它们对于基于函数的getter和setter很方便,但是在我的例子中,我想要一个实际的对象。我应该在对象上编写getPal()和setPal()方法吗?

    1 回复  |  直到 16 年前
        1
  •  8
  •   Yuri    6 年前

    瞬态确实用于阻止域对象中的字段被持久化(如果要在 pal onLoad() 事件或写一个 getPal()

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

    如果将封送员添加到 BootStrap.groovy 它们将在您的控制器中可用。

    (还发现: http://old.nabble.com/Taggable-plugin-and-JSON-converter-ts24830987.html#a24832970

    推荐文章