Grails 3.3.2访问自定义元约束

时间:2018-02-22 03:52:55

标签: grails gorm gsp grails-constraints

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

GSP呈现代码:

public class IgnoreNullBeanUtilsBean extends BeanUtilsBean {
  ...
  @Override
  public void copyProperties(final Object dest, final Object orig) {
    ...
    final Object value = getPropertyUtils().getSimpleProperty(orig, name);
    if (value != null) {
      copyProperty(dest, name, value);
    }
    ...
  }
  ...
 }

域类约束:

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

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

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

2 个答案:

答案 0 :(得分:0)

因此基于ConstrainedDelegate class,我认为简短的回答是它不可能。 ConstrainedDelegate不公开metaConstraints地图或DefaultConstrainedProperty的属性映射。我会将问题保持开放,但希望有更多了解Grails架构路线图的人可以解释为什么

与此同时,我能够通过重新设计格式约束并将格式与我预定义的标签进行比较来破解解决方案。虽然我喜欢听到关于如何实现我的原始目标的其他想法,因为这显然不是如何使用格式。

答案 1 :(得分:0)

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

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

private void btn_takeScreenshot_Click(object sender, EventArgs e)
{            
    Cursor.Current = Cursors.Cross;            
}

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