0

現時点では、grails で足場を処理しようとしています。そこで、解決策が見つからない生成テンプレートに少し問題があります。ドメインモデルで生成アルゴリズムを構成したいと考えています。私の考えは、データベースで作成されず、生成プロセスにのみ重要な静的変数をモデルで定義することでした。たとえば、show.gsp にいくつかの特別なフィールドのみを表示したいが、_form.gsp にはすべてのフィールドを表示したい、または、いくつかの gsp-import を実行したいが、別の 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"])
}

Show-View では、配列「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」の値を取得できないことです。私の質問を知ってください:

  • ドメインクラスのフィールドの値を受け取ることができますか?
  • ドメインクラスのメソッドを実行できますか?
  • 生成テンプレートでアクセスできる構成パラメーターを定義する別の方法はありますか?

私の問題を表示できたことを願っています。助けてくれてありがとう!グリーツV

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 に答える