0

目前我尝试处理 grails 中的脚手架。那里我没有找到解决方案的生成模板有一个小问题。我想在域模型中配置生成算法。我的想法是在模型中定义静态变量,这些变量不是在数据库中创建的,只对生成过程很重要。例如,我只想在 show.gsp 中显示一些特殊字段,但我想在 _form.gsp 中显示每个字段,或者我想做一些 gsp-imports 但只在单独的 gsp 中。所以我认为我可以定义一些静态变量,其中的值包含一些我可以在生成模板中解释的配置参数。我希望每个人都明白我的意思?

这是一个例子:

class Awesome {
Long awesome_level
Long person_name
    Boolean itsMe

static String showFields 
static transients = ['showFields']

static constraints = {
    einrichtungs_type()
    type_of_conzept()
    anzahl_gruppen()
    anzahl_kinder_pro_Gruppe()
    offnungszeiten()
    showFields(["person_name", "itsMe"])
}

在显示视图中,我只想显示数组“showFields”中的字段

...
for (p in props) {
    if (p.embedded && p.name in domainClass.showFields) {
        def embeddedPropNames = p.component.persistentProperties*.name
        def embeddedProps = p.component.properties.findAll { embeddedPropNames.contains(it.name) && !excludedProps.contains(it.name) }
        Collections.sort(embeddedProps, comparator.constructors[0].newInstance([p.component] as Object[]))
        %><fieldset class="embedded"><legend><g:message code="${domainClass.propertyName}.${p.name}.label" default="${p.naturalName}" /></legend><%
            for (ep in p.component.properties) {
                renderFieldForProperty(ep, p.component, "${p.name}.")
            }
        %></fieldset><%

    } else {
        renderFieldForProperty(p, domainClass)
    }
...

我知道 if 子句不起作用。我的问题是,我无法获得“showFields”字段的值。了解我的问题:

  • 它是否能够接收域类字段的值?
  • 它能够执行域类的方法吗?
  • 还有其他方法可以定义我可以在生成模板中访问的配置参数吗?

我希望我能够展示我的问题并感谢您的帮助!格雷茨五世

4

1 回答 1

0

我找到了解决该问题的方法。首先,我认为创建自定义约束是可能的。我仍然认为这也是可能的,但我找到了一种更好/更简单的方法来添加“配置”。我使用已经存在的标签属性。如果我理解正确,我用来在 select-Html-tags 中添加属性的属性参数。现在我用它来添加一些配置参数。这是我的解决方案:

  1. 您必须更改并非所有配置参数都将作为属性添加到 HTMl 标记中的“renderEditor.template”。cp.attributes.each { k, v -> sb << "${k}=\"${v}\" " }改成cp.attributes?.realAttributes.each { k, v -> sb << "${k}=\"${v}\" " }
  2. 当您真的想要此属性函数时,将值“realAttributes”(或您希望如何调用它)添加到属性参数中
  3. 更改模型的约束:(在我的示例中:)

静态约束 = { einrichtungs_type(attributes: [showField:true]) }

  1. 最后更改生成模板

if(cp.attributes?.showField){ ...

如果您遇到几乎相同的问题,我希望这 4 个步骤对您有所帮助。

格雷茨

于 2013-08-22T04:33:35.567 回答