如何解决Grails:按名称查找域类
| 我想允许用户遍历域类并打印出转储的东西。我的第一个问题:假设以下工作正常://this works
class EasyStuffController{
def quickStuff = {
def findAThing = MyDomainClass.findByStuff(params.stuff)
[foundThing:findAThing]
}
}
以下是我要写的正确方法:
//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字段。
解决方法
如果您知道完整的软件包,则可以使用以下方法:
String className = \"com.foo.bar.MyDomainClass\"
Class clazz = grailsApplication.getDomainClass(className).clazz
def findAThing = clazz.findByStuff(params.stuff)
如果您不使用软件包,也可以使用。
如果使用软件包,但用户仅提供类名而不提供软件包,并且名称在所有软件包中都是唯一的,则可以使用以下方法:
String className = \"MyDomainClass\"
Class clazz = grailsApplication.domainClasses.find { it.clazz.simpleName == className }.clazz
def findAThing = clazz.findByStuff(params.stuff)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。