Grails domainClasses获得瞬态属性

时间:2011-06-16 23:24:40

标签: grails metaprogramming grails-domain-class transient

GrailsDomainClass类有两种方法:getPropertiesgetPersistentProperties

我有一个域类(MyDomainClass),其中包含:

static transients = {computeStuff}
float computeStuff(){
  def thisCouldChange = 3.1
  return thisCouldChange  //it actually does things but not of consequence to my question
}

好的,我拿了默认索引页面并修改它以列出MyDomainClass的所有属性:

<g:each var="d" in="${grailsApplication.domainClasses.sort { it.fullName } }">
<h2>${d.fullName}</h2>
<g:each var="f" in="${d.properties.sort { it.fieldName } }">
<br>${f.fieldName }
</g:each>
</g:each>

确定。这可行,但它没有得到任何瞬态属性。我尝试过d.properties和d.persistantProperties,他们似乎给了我相同的结果。在此先感谢您的帮助!!

我需要将其称为getComputeStuff吗?

我现在已经更改了我的域类以包含它,但仍然没有得到瞬态computeStuff

static transients = ['computeStuff']
float getComputeStuff(){
  def thisCouldChange = 3.1
  return thisCouldChange  //it actually does things but not of consequence to my question
}

这似乎没有任何区别。

2 个答案:

答案 0 :(得分:2)

删除静态瞬态decleration。按如下方式定义您的方法:

def getComputeStuff(){
  def thisCouldChange = 3.1
  return 3.1  //it actually does things but not of consequence to my question
}

之后,属性调用“computeStuff”应出现在域类中调用getProperties()的属性列表中。将返回值定义为 def 非常重要。

答案 1 :(得分:0)

我认为,如果您希望将computeStuff方法视为属性,请将其命名为getComputeStuff - 将名称约定为JavaBeans。我不确定它会起作用,但我觉得值得一试;)