2

入力フィールドのコードを短縮するために、taglib を作成しました。「名前」、「値」などを事前に設定します。ここで Bean 値を取得する必要がありますが、その値を保持するフィールドは動的です。
いくつかのコードを参照してください(問題を解決するために短縮されています):

gsp:

<g:validatedInputField bean="${command}" field="surname" />
<g:validatedInputField bean="${command}" field="name" />

タグライブラリ

def validatedInputField = { attrs, body ->

    def field = attrs.field
    def bean = attrs.bean

    if (field && bean) {

        def val = bean.field
        out << "<input type=\"text\" name=\"$field\" bean=\"$bean\" value=\"$val\">"
    }
}

したがって、問題は次の行です。Bean にフィールド「フィールド」がないため、明らかに機能しません。「名前」または「姓」、またはパラメーター「フィールド」の値が何であれ、動的に置き換えられるようにします。

def val = bean.field

さまざまな GString/interpolation のバリエーションを試してみましたが、何も機能しませんでした。
もちろん、値を渡すために別のパラメーターを追加することもできますが、taglib で取得するために必要なものはすべて既にあるので、必要ではないと思います...

道順を教えてください。
ありがとう

4

2 に答える 2

1

groovy では、GStrings を使用してオブジェクトのメンバーを動的に参照できます。例えば:

def val = bean."${field}"

GString 内でいくつかのロジックを実行することもできます。デフォルトのフィールドがあり、null でない場合にのみ「フィールド」変数内で名前を使用したいとします。

def val = bean."${field ? field : "default"}
于 2013-02-02T16:16:14.920 に答える
1

beanがオブジェクト インスタンスでありfield、そのオブジェクトのメンバーを表す文字列である場合は、次のようなものを試すことができます。

def val = bean."$field"
于 2013-02-02T15:59:59.657 に答える