Grails:如何在域类属性上设置元约束?

时间:2011-01-25 14:48:58

标签: grails gorm

我有一个属于订阅的Contact类,我想在订阅属性上设置一个假设的只读约束,以便在scaffold模板中使用。

该课程类似于

class Contact {

   static belongsTo = [subscription: Subscription]

   static constraints = {
     subscription(nullable: false, readonly: true) // hypothetic *readonly* constraint
     name(blank: false)
     email(blank: false, email: true)
   }

   Integer id
   String name
   String email
   String description
}

我发现ConstrainedProperty.addMetaConstraint方法“添加了一个元限制,这是一种非验证信息约束”。

如何在Domain类中调用它?

我如何获得元约束?

2 个答案:

答案 0 :(得分:3)

在脚手架模板中,有一个属性为domainClass,类型为org.codehaus.groovy.grails.commons.DefaultGrailsDomainClass。这些对象具有属性constrainedProperties。要超出'readonly',你必须这样做:

您的域类:

class Contact {
   static belongsTo = [subscription: Subscription]

   static constraints = {
       subscription(nullable: false, attributes: [readonly: true])  
   }

   String description
}
脚手架模板中的

def ro = domainClass.constrainedProperties.subscription.attributes.readonly

DefaultGrailsDomainClass有一个带有类型Class属性的构造函数,也许你可以这样做:

def domainClass = new DefaultGrailsDomainClass(Contact.class)
def ro = domainClass.constrainedProperties.subscription.attributes.readonly

也许有一个工厂,但我不知道。

答案 1 :(得分:1)

如果您特别想要一个影响脚手架表单字段的readonly约束,您可以使用:

static constraints = {
    subscription(editable: false)
}

以下是renderEditor.template使用的约束列表(无论如何我可以通过快速搜索找到):

  • editable(如果false,导致呈现的字段只读 - 适用于字符串和日期字段)
  • 小部件(如果'textarea',字段呈现为textarea - 适用于字符串字段)
  • format(对于日期字段,将约束值提供给datePicker的format属性)