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

这是Grails瞬态的有效使用吗?,第1张

概述我有一个域对象,我想在其中存储一些只存在于运行时的东西.我查看了 documentation并找到了瞬态关键字,从表面上看它就是我想要的.这是我的域对象的样子…… class Contact { def Seeker def beforeInsert() { initiatedDate = new Date() } Date initi 我有一个域对象,我想在其中存储一些只存在于运行时的东西.我查看了 documentation并找到了瞬态关键字,从表面上看它就是我想要的.这是我的域对象的样子……

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

Seeker是一个groovy类,它不是域对象,而是一些属性的占位符.

到目前为止一切都很好,我的Contact表没有预期的pal字段.在我的ContactController中,我查询了一堆联系人c,然后查找他们的搜索者伙伴(详细说明如何保留)并将pal字段设置为新对象.

c.pal = new Seeker();c.pal.name = otherObject.namerender c as JsON

除了返回的JsON中缺少pal对象之外,这一切似乎都能正常工作.

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

谢谢

解决方法 瞬态确实用于阻止域对象中的字段被持久化. (如果你想在pal字段上执行一些init而不必将它放在你的控制器中,你可以使用onLoad()事件或编写一个覆盖默认属性getter的getPal()方法.您还应该注意,默认的JsON编组器仅呈现持久字段.

渲染我的域对象时,我发现创建JsON对象marshallers非常有用,这样就不会渲染不需要的属性,但它也可以解决你的瞬态问题.您可以使用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中添加了marshallers,它们将在您的控制器中可用.

HTH

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

总结

以上是内存溢出为你收集整理的这是Grails瞬态的有效使用吗?全部内容,希望文章能够帮你解决这是Grails瞬态的有效使用吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1075211.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存