我需要向文件renderEditor.template 发送一个参数(在安装“grails install-templates”之后),但我不知道如何。谁能帮我?谢谢。
问问题
595 次
2 回答
2
可用的绑定变量在DefaultGrailsTemplateGeneratorrenderEditor.template
中是固定的
def binding = [pluginManager: pluginManager,
property: property,
domainClass: domainClass,
cp: cp,
domainInstance:getPropertyName(domainClass)]
domainClass
是GrailsDomainClass
,property
是GrailsDomainClassProperty
传递给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 回答