2

レガシーデータベースの上にgrails(2.1.0)アプリケーションを構築しようとしています。たくさんのテーブルがあり、ダイナミックな足場だけを使いたいです。問題は、一部のテーブルに主キーとして文字列が含まれていることですが、src / templates / scaffolding /Controller.groovyのテンプレートコード(例:show)は

def show(Long id) {
    def ${propertyName} = ${className}.get(id)
    if (!${propertyName}) {
        flash.message = message(code: 'default.not.found.message', args: [message(code: '${domainClass.propertyName}.label', default: '${className}'), id])
        redirect(action: "list")
        return
    }

    [${propertyName}: ${propertyName}]
}

文字列キーの場合、これにより文字列がnullに変わるようで、getはエラーで失敗します$Domain not found with id null

generate-controllerを実行し、署名をに変更するとdef show(String id)、期待どおりに機能します。

では、「動的スキャフォールディング時」にドメインクラスを検査し、それに応じてメソッドを作成する方法はありますか?

4

1 に答える 1

6

コントローラーテンプレート内には、コントローラーを生成しているクラスを表すためdomainClassのアクセスを提供する変数があるGrailsDomainClassため、次のように実行できます(およびeditupdateおよびdelete):

def show(${domainClass.identifier.type.name} id) {

生成するdef show(java.lang.Long id)def show(java.lang.String id)、必要に応じて。

于 2012-09-07T15:25:10.057 に答える