1

ファイルrenderEditor.templateにパラメーターを送信する必要があります(「grailsinstall-templates」のインストール後)が、方法がわかりません。誰か助けてもらえますか?ありがとう。

4

2 に答える 2

2

で使用可能なバインディング変数は、 DefaultGrailsTemplateGeneratorrenderEditor.templateで修正されています

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

domainClassでありGrailsDomainClass、スキャフォールディングテンプレートで呼び出しに渡されたものpropertyであり、対応するである。それらの1つから必要なものを抽出できる場合があります。GrailsDomainClassPropertyrenderEditor(p)cpConstrainedProperty

于 2013-01-24T14:53:19.800 に答える
0

同じ問題でグーグル経由でここに来た他の人々のために(私がしたように)

Ian Robertsが提案したのと同じようにこれを行うことができましたが、TemplateGeneratorの新しい実装を作成する必要はありません。必要なのは、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  << '"'

ところで。これで、カスタムrenderEditorで正しく動作するようにコンポジション(埋め込み)を作成しました

于 2015-07-13T16:53:34.540 に答える