grails - Groovy/Grails-如何检查Domain类中的关系?

标签 grails groovy tags

我正在编写一个标签,该标签本质上需要为参数通过标签请求的字段转储任意域类。如果该字段是普通属性,则可以正常工作。但是,如果是“hasMany”关系,我有什么选择?

换句话说,如何检查作为参数传递给标签的字符串是否对应于“hasMany”关系,并获取相应的域名?

请注意,我可以实例化域类并对其进行getClass-也许它在属性中?我会检查的,但是任何输入都值得赞赏。

更具体地说,在下面的代码中,我需要检查是否有任何名称是与属性相对的“hasMany”关系,访问该域,并打印该域的所有实例。

这是不存在的代码:

/ *
*标记到输出域级别的信息
*
* /

def get_domain_info = { attrs, body ->


    // get the domain name for lookup on the Misc Fields XML table
    def id = attrs['id']


    def domainName = attrs['domain_name']

    // get the domainInstance
    def domainInstance = grailsApplication.getArtefact("Domain",domainName)?.
    getClazz()?.get(id)


    def dataNames = attrs['data_names']

    def dataNameArray = dataNames.split(",")

    out << "<div class=\"dialog\">"

    for(dataName in dataNameArray) {
        out << "<tr class=\"prop\">"
        out << "<td valign=\"top\" class=\"name\">"  + dataName + "</td>"
        def dataValue = domainInstance[dataName.trim()]
        if (dataValue == null){
            dataValue = ""
        }
        def valueLine
        if ( dataValue.class == java.sql.Timestamp){
            valueLine = "<td valign=\"top\" class=\"value\">"  +
            dataValue.format("d MMM yyyy") +  "</td>"
        }
        else {
            valueLine = "<td valign=\"top\" class=\"value\">"  + dataValue + "</td>"
        }
        out << valueLine
        out << "</tr>"

    }

最佳答案

域类应始终为hasMany定义一个Set或List属性,例如:

class Author {
   static hasMany = [books:Book]
   List books
}

因此,在这种情况下,domainInstance[dataName]将返回书籍列表。您真正需要做的就是查看该属性是否为Collection:
 if(dataValue instanceof Collection) {
     // handle hasMany
 }

是一些奇怪的情况,hasMany也可以是Map。参见http://www.grails.org/GORM+-+Collection+Types

关于grails - Groovy/Grails-如何检查Domain类中的关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2065808/

相关文章:

Grails addTo 重复项

不需要 PHP 结束标记?

grails - Grails 2.4.4与Java 8的兼容性

validation - 在Grails中更改控制组的Twitter Bootstrap验证状态

hibernate - 从重复名称列表中获取复杂的唯一变量

unit-testing - Grails 单元测试 Buggy 动态查找器

java - 使用 Groovy 或 Java 将日志发送到 Syslog 服务器

c# - 如何使用 C# 从标签 xml 中提取属性?

java - 一种文字冒险游戏战斗系统的方法

java - 测试Grails应用程序生成pdf文件无法在空对象上获取属性 'config'