【问题标题】:Grails 3.3.2 accessing custom meta constraintsGrails 3.3.2 访问自定义元约束
【发布时间】:2018-02-22 03:52:54
【问题描述】:

在一个 grails 2.4.4 项目中,我能够在域属性上定义自己的自定义约束(称为“supportsToUrl”)并将其用作标记来控制 GSP 中的呈现逻辑。

GSP 渲染代码:

if(domainClass.constraints[p.name].getMetaConstraintValue('supportsToUrl'))

域类约束:

static constraints = {
    embedCode(nullable:true, blank:true, unique:false, display:true, supportsToUrl:true)
}

Upgrading from Grails 3.2.x“Grails Validator and ConstrainedProperty API Deprecated”部分讨论了如何移动此功能。但是,我在新 API 中没有看到任何涉及元约束的内容。

我的问题是:如何在 Grails 3.3.2 中访问自定义约束?

【问题讨论】:

    标签: grails grails-orm gsp grails-constraints


    【解决方案1】:

    您仍然可以在 Grails 3.3 中访问元约束。* 来自Validateable trait getConstraintsMap()。

    支持 url 的所有属性的示例列表 (supportsToUrl: true)

    Set<String> supportsUrlProperties = new HashSet<>()
    Map<String, Constrained> constraints = domainObject.getConstraintsMap()
    if(constraints) {
         constraints.values().each { Constrained constrained ->
            DefaultConstrainedProperty propertyToCheck = constrained.properties?.property as DefaultConstrainedProperty
            if(propertyToCheck) {
                def supportsToUrlConstraint = propertyToCheck.getMetaConstraintValue('supportsToUrl')
                if (supportsToUrlConstraint != null && BooleanUtils.isTrue(supportsToUrlConstraint as Boolean)) {
                    supportsUrlProperties.add(propertyToCheck.getPropertyName())
                }
            }
        }
    }
    

    请注意,它只看到来自域/实体(抽象或非抽象)的约束,这些约束标记有 Validateable 特征。类层次结构不适用 - 当根/超类实现它时,顶级类的约束仍然不可见,直到您也将其标记为 Validateable

    【讨论】:

    • 我最终使用了以下 GSP 语法:domainClass.constrainedProperties[p.name]?.property?.getMetaConstraintValue(com.hausam.scorecard.Constants.ENCODE_AS_RAW)?.toBoolean() 感谢您的支持帮助!
    【解决方案2】:

    所以基于ConstrainedDelegate class,我认为简短的回答是这是不可能的。 ConstrainedDelegate 不公开 metaConstraints 映射或DefaultConstrainedProperty 的属性映射。我将保留这个问题,但希望对 Grails 架构路线图更了解的人可以解释为什么

    与此同时,我能够通过重新利用格式约束并将格式与我的预定义标签进行比较来组合出一个解决方案。虽然我很想听听关于如何实现我最初目标的其他想法,因为这显然不是格式的预期使用方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-23
      相关资源
      最近更新 更多