1

我需要向文件renderEditor.template 发送一个参数(在安装“grails install-templates”之后),但我不知道如何。谁能帮我?谢谢。

4

2 回答 2

2

可用的绑定变量在DefaultGrailsTemplateGeneratorrenderEditor.template中是固定的

    def binding = [pluginManager: pluginManager,
                   property: property,
                   domainClass: domainClass,
                   cp: cp,
                   domainInstance:getPropertyName(domainClass)]

domainClassGrailsDomainClass,propertyGrailsDomainClassProperty传递给renderEditor(p)脚手架模板中调用的 ,cp是对应的ConstrainedProperty. 您也许可以从其中之一中提取您需要的东西。

于 2013-01-24T14:53:19.800 回答
0

对于其他通过谷歌遇到同样问题的人(和我一样)

我已经设法按照 Ian Roberts 建议的方式这样做了,但是您不需要为模板生成器创建新的实现。您只需为org.codehaus.groovy.grails.commons.GrailsDomainClassProperty创建一个代理实现

在 _form.gsp 中,我刚刚创建了带有添加数据的新属性:

p = new HgfGrailsDomainClassProperty(p, prefix, domainClass)
if (display) { %>
<hgf:ifAllowedOnField action="show" field="${p.name}">
<hgf:ifReasonToShow reasonElement="${p.name}" bean="\${${propertyName}}">
<div class="fieldcontain \${hasErrors(bean: ${propertyName}, field: '${prefix}${p.name}', 'error')} ${required ? 'required' : ''} ${(cp?.metaConstraints?.hiddenField)?'hiddenProperty':''}">
    <label for="${prefix}${p.name}">
        <g:message code="${domainClass.propertyName}.${prefix}${p.name}.label" default="${p.naturalName}" />
        <% if (required) { %><span class="required-indicator">*</span><% } %>
    </label>
    ${renderEditor(p)}
...

实现可能如下所示:

package sk.hoppo.hgf;

import org.codehaus.groovy.grails.commons.GrailsDomainClass
import org.codehaus.groovy.grails.commons.GrailsDomainClassProperty

public class HgfGrailsDomainClassProperty implements GrailsDomainClassProperty {

private final String domainSuffix = "Instance";
private GrailsDomainClassProperty property;
String prefix;
String domainInstance;

public HgfGrailsDomainClassProperty(GrailsDomainClassProperty property, String prefix, GrailsDomainClass parentDomainClass) {
    super();
    this.property = property;
    this.prefix = prefix;
    domainInstance = getPropertyName(parentDomainClass);
}

private String getPropertyName(GrailsDomainClass domainClass) {
    return "${domainClass.propertyName}${domainSuffix}";
}

@Override
public int getFetchMode() {
    return property.getFetchMode();
}

@Override
public String getName() {
    return property.getName();
}
...

在 renderEditor.template 中,您只需访问发送数据:

sb << '<hgf:securedField'
sb << ' name="' << property.prefix << property.name  << '"'
sb << ' field="' << property.prefix << property.name  << '"'

顺便提一句。有了这个,我已经制作了合成(嵌入)以正确使用我的自定义渲染编辑器

于 2015-07-13T16:53:34.540 回答