在Grails中获取用户创建的域类的域名

在Grails中获取用户创建的域类的域名,grails,Grails,是否有一种方法可以访问用户创建的域的域对象元数据(因为没有更好的词),而不是通过插件等方式集成到项目中的域对象 我想要的是在gsp文件中获取各种gui相关活动(构建菜单等)的域对象名称 所以如果我做这样的事情: <% for( domain in grailsApplication.domainClasses ){ print ( '<h3>domain class locgial property name: ' + domain.logicalPro

是否有一种方法可以访问用户创建的域的域对象元数据(因为没有更好的词),而不是通过插件等方式集成到项目中的域对象

我想要的是在gsp文件中获取各种gui相关活动(构建菜单等)的域对象名称

所以如果我做这样的事情:

<%
    for( domain in grailsApplication.domainClasses ){
        print ( '<h3>domain class locgial property name: ' + domain.logicalPropertyName + '</h3>' )
        print ( '<h3>domain  full name: ' + domain.fullName + '</h3>' )
    }
%>
import org.codehaus.groovy.grails.plugins.metadata.GrailsPlugin

class MyController {

   def myAction = {
      ...
      def appDomainClasses = grailsApplication.domainClasses.findAll {
         !it.clazz.isAnnotationPresent(GrailsPlugin)
      }
      [appDomainClasses: appDomainClasses]
   }
}


。。。我可以获取名称,在JS中对它们进行黑客攻击,以确定它们是否属于我自己生成的包(例如com.ra),但这似乎非常脆弱。

插件类包含编译器添加的
org.codehaus.groovy.grails.plugins.metadata.GrailsPlugin
注释,因此,您可以将应用程序的域类从控制器传递到模型中的GSP,如下所示:

<%
    for( domain in grailsApplication.domainClasses ){
        print ( '<h3>domain class locgial property name: ' + domain.logicalPropertyName + '</h3>' )
        print ( '<h3>domain  full name: ' + domain.fullName + '</h3>' )
    }
%>
import org.codehaus.groovy.grails.plugins.metadata.GrailsPlugin

class MyController {

   def myAction = {
      ...
      def appDomainClasses = grailsApplication.domainClasses.findAll {
         !it.clazz.isAnnotationPresent(GrailsPlugin)
      }
      [appDomainClasses: appDomainClasses]
   }
}
然后在GSP中循环通过它们:

<g:each var='dc' in='${appDomainClasses}'>
<h3>domain class logical property name: ${dc.logicalPropertyName}</h3>
<h3>domain full name: ${dc.fullName}</h3>
</g:each>

域类逻辑属性名称:${dc.logicalPropertyName}
域名全名:${dc.fullName}

插件类具有编译器添加到它们的
org.codehaus.groovy.grails.plugins.metadata.GrailsPlugin
注释,因此您可以在模型中将应用程序的域类从控制器传递到GSP,如下所示:

<%
    for( domain in grailsApplication.domainClasses ){
        print ( '<h3>domain class locgial property name: ' + domain.logicalPropertyName + '</h3>' )
        print ( '<h3>domain  full name: ' + domain.fullName + '</h3>' )
    }
%>
import org.codehaus.groovy.grails.plugins.metadata.GrailsPlugin

class MyController {

   def myAction = {
      ...
      def appDomainClasses = grailsApplication.domainClasses.findAll {
         !it.clazz.isAnnotationPresent(GrailsPlugin)
      }
      [appDomainClasses: appDomainClasses]
   }
}
然后在GSP中循环通过它们:

<g:each var='dc' in='${appDomainClasses}'>
<h3>domain class logical property name: ${dc.logicalPropertyName}</h3>
<h3>domain full name: ${dc.fullName}</h3>
</g:each>

域类逻辑属性名称:${dc.logicalPropertyName}
域名全名:${dc.fullName}

Grails 3.3.11中,我能够找到域类列表,如下所示

List<GrailsClass> getDomainClasses() {
    Holders.grailsApplication.getArtefacts("Domain").findAll {
        it.pluginName == null
    }.toList()
}
列出getDomainClasses(){
Holders.grailsApplication.getArtefacts(“域”).findAll{
it.pluginName==null
}托利斯先生()
}
要查找控制器类的列表,以下方法可能会有所帮助

List<GrailsClass> getControllerClasses() {
    Holders.grailsApplication.getArtefacts("Controller").findAll {
        it.pluginName == null
    }.toList()
}
List getControllerClass(){
Holders.grailsApplication.getArtefacts(“控制器”).findAll{
it.pluginName==null
}托利斯先生()
}
要仅获取用户创建的域类的名称,请使用以下代码

List<String> getDomainClassesNames() {
    Holders.grailsApplication.getArtefacts("Domain").findAll {
        it.pluginName == null
    }.collect {it.shortName }.toList()
}
列出getDomainClassesNames(){
Holders.grailsApplication.getArtefacts(“域”).findAll{
it.pluginName==null
}.collect{it.shortName}.toList()
}
要使用域类的属性,可以考虑使用以下代码

List<MetaProperty> findDomainClassProperties(GrailsClass domainClass) {
    return domainClass.metaClass.properties
}
列出findDomainClassProperties(GrailClass domainClass){
返回domainClass.metaClass.properties
}

Grails 3.3.11中,我能够找到域类列表,如下所示

List<GrailsClass> getDomainClasses() {
    Holders.grailsApplication.getArtefacts("Domain").findAll {
        it.pluginName == null
    }.toList()
}
列出getDomainClasses(){
Holders.grailsApplication.getArtefacts(“域”).findAll{
it.pluginName==null
}托利斯先生()
}
要查找控制器类的列表,以下方法可能会有所帮助

List<GrailsClass> getControllerClasses() {
    Holders.grailsApplication.getArtefacts("Controller").findAll {
        it.pluginName == null
    }.toList()
}
List getControllerClass(){
Holders.grailsApplication.getArtefacts(“控制器”).findAll{
it.pluginName==null
}托利斯先生()
}
要仅获取用户创建的域类的名称,请使用以下代码

List<String> getDomainClassesNames() {
    Holders.grailsApplication.getArtefacts("Domain").findAll {
        it.pluginName == null
    }.collect {it.shortName }.toList()
}
列出getDomainClassesNames(){
Holders.grailsApplication.getArtefacts(“域”).findAll{
it.pluginName==null
}.collect{it.shortName}.toList()
}
要使用域类的属性,可以考虑使用以下代码

List<MetaProperty> findDomainClassProperties(GrailsClass domainClass) {
    return domainClass.metaClass.properties
}
列出findDomainClassProperties(GrailClass domainClass){
返回domainClass.metaClass.properties
}