0

URLで指定されたコントローラーにサフィックスを追加しようとしています。

/admin/mycontroller/MyAdminControllerにマップしたい。

運が悪かったのでたくさんのバリエーションを試しました...何か提案はありますか?

static mappings = {
    "/admin/$controller/$action?/$id?"{
        controller = controller.endsWith('Admin')?controller: (controller+'Admin')  
    }
}
4

2 に答える 2

1

これは、コントローラーのアーティファクトを繰り返し処理し、URL マップを動的に構築することで実現しました。

class UrlMappings {
    static mappings = {
        def adminControllers = ACH.grailsApplication.controllerClasses
        .findAll({ it.logicalPropertyName.endsWith('Admin')})
        .collect({ it.logicalPropertyName })

        adminControllers.each { controllerName ->
            def shortName = controllerName - 'Admin'
            "/admin/$shortName/$action?/$id?" (controller: controllerName)
        }
    }
 }

Burt BeckwithによるApplicationContextHolderこのブログ投稿で説明されているように、ACH はカスタムです。

編集:

/admin/blahこれにより、 にマップされますがBlahAdminController、 は含まれないような URL 構造が作成されます/admin/blahAdmin

于 2013-03-01T23:12:24.000 に答える
-1

慣例により、grails ではコントローラー クラス名を で終わらせる必要があります。Controller

  1. に名前を変更することをお勧めしMyControllerAdminますMyAdminController

  2. controller上書きしたい場合のように、URLの変数に名前を付けるのは問題になると思います。次のようなものを試してください:

    static mappings = {
        "/admin/$cName/$action?/$id?"{
            controller = cName.endsWith('Admin') ? cName : (cName + 'Admin')  
        }
    }
    
  3. の注文事項UrlMappingsです。別のルールがこのルールに干渉していないことを確認してください。

于 2013-03-01T23:01:27.480 に答える