首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Grails:按名称查找域类

Grails:按名称查找域类
EN

Stack Overflow用户
提问于 2011-06-14 09:25:05
回答 1查看 16.5K关注 0票数 18

我希望允许用户遍历域类并打印出转储的内容。我的第一个问题:假设下面的工作很好:

代码语言:javascript
复制
//this works
class EasyStuffController{
  def quickStuff = {
    def findAThing = MyDomainClass.findByStuff(params.stuff)
    [foundThing:findAThing]
  }
}

什么是正确的方式来写下我想要说的话:

代码语言:javascript
复制
//this doesn't
class EasyStuffController{ servletContext ->
  def quickStuff = {
    def classNameString = "MyDomainClass" //or params.whichOne something like that
    def domainHandle = grailsApplication.domainClasses.findByFullName(classNameString)
    //no such property findByFullName
    def findAThing = domainHandle.findByStuff(params.stuff)
    [foundThing:findAThing]
  }
}



//this also doesn't
class EasyStuffController{ servletContext ->
  def quickStuff = {
    def classNameString = "MyDomainClass" //or params.whichOne something like that
    def domainHandle 
    grailsApplication.domainClasses.each{
      if(it.fullName==classNameString)domainHandle=it
    }
    def findAThing = domainHandle.findByStuff(params.stuff)
    //No signature of method: org.codehaus.groovy.grails.commons.DefaultGrailsDomainClass.list() is applicable
    [foundThing:findAThing]
  }
}

上面的那些行根本不起作用。我试图让用户能够选择任何域类,并用“stuff”取回它。假设:所有域类都有一个相同类型的Stuff字段。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-14 09:54:28

如果你知道完整的包,你可以使用这个:

代码语言:javascript
复制
String className = "com.foo.bar.MyDomainClass"
Class clazz = grailsApplication.getDomainClass(className).clazz
def findAThing = clazz.findByStuff(params.stuff)

如果你不使用包,这也是可行的。

如果您使用包,但用户将只提供没有包的类名,并且名称在所有包中都是唯一的,那么您可以使用以下代码:

代码语言:javascript
复制
String className = "MyDomainClass"
Class clazz = grailsApplication.domainClasses.find { it.clazz.simpleName == className }.clazz
def findAThing = clazz.findByStuff(params.stuff)
票数 45
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6338148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档