Grails:如何对列中显示的列应用约束

时间:2011-12-16 05:32:33

标签: grails grails-domain-class

我是新手,请告诉我如何在控制器中写脚手架true之后如何在列中显示约束,即我在域名,电子邮件,密码,手机中有列,但我想显示当列表显示时,网格中只有姓名,电子邮件和电话,有没有办法通过域名执行此操作?请给我一个解决方案,谢谢。

4 个答案:

答案 0 :(得分:2)

您可以安装模板(http://grails.org/doc/latest/ref/Command%20Line/install-templates.html)

grails install-templates

模板允许您覆盖Grails在控制器,视图等中使用的默认模板。如果查看src / templates / scaffolding / list.gsp,您可以看到它们已经排除了某些属性('id'和'版)。我在我的域类中添加了一个静态列表:

static excludedFromListViewProperties = ["password"]

在list.gsp中我替换了:

<%  excludedProps = Event.allEvents.toList() << 'id' << 'version'                           
allowedNames = domainClass.persistentProperties*.name << 'dateCreated' << 'lastUpdated'

使用:

<%  excludedProps = Event.allEvents.toList() << 'id' << 'version'
excludedProps.addAll(domainClass.getClazz().excludedFromListViewProperties ?: [])
allowedNames = domainClass.persistentProperties*.name << 'dateCreated' << 'lastUpdated'

如果这对您不起作用,请告诉我。

答案 1 :(得分:0)

脚手架在幕后制造东西。您可以通过以下方式生成特定域类的所有视图和控制器:

grails generate-all packageName.DomainClass

执行命令后,您可以根据需要简单地更改生成的控制器和视图。

答案 2 :(得分:0)

您可以查看Dynamic Scaffolding状态

  

此外,标准scaffold视图需要InstanceList形式的模型变量用于集合,而Instance用于单个实例。使用诸如“书籍”和“书籍”之类的属性很诱人,但这些属性不起作用。

因此,也许您可​​以通过仅返回所需字段的实例来覆盖脚手架操作。但您可能需要一种中间数据类型。这是一种探索方式

答案 3 :(得分:0)

Jarred的答案的略微改进版本,用于检查excludedFromListViewProperties属性的存在:

domainClass.getClazz().metaClass.properties.findAll{
   if (it.name == "excludedFromListViewProperties"){
        excludedProps.addAll(domainClass.getClazz().excludedFromListViewProperties ?: [])
    }
}