我正在编写一个标记,基本上需要将通过参数请求的字段的任意域类转储到标记。如果该字段是普通属性,则此方法正常。但是,如果它是“hasMany”关系,我有什么选择?
换句话说,如何检查作为参数传递给标签的字符串是否对应于“hasMany”关系,并获取相应的域名?
请注意,我可以实例化域类并对其执行getClass - 也许它在属性中?我会检查,但任何输入都非常感谢。
更具体地说,在下面的代码中,我需要检查是否有任何名称是“hasMany”关系而不是属性,访问该域,并打印它的所有实例。
这是代码,因为它存在nos:
/ * *标记输出域级别信息 * * /
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>"
}
答案 0 :(得分:0)
域类应始终具有为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