How do you share common methods in different grails controllers?

后端 未结 5 1649
南笙
南笙 2020-12-13 01:39

Currently when I need to share a method like processParams(params) between different controllers, I use either inheritance or services. Both solution has some

5条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-12-13 01:47

    You can use the Delegation design pattern:

    class Swimmer {
        def swim() { "swimming" }
    }
    
    class Runner {
        def run() { "running" }
    }
    
    class Biker {
        def bike() { "biking" }
    }
    
    class Triathlete { 
        @Delegate Swimmer swimmer
        @Delegate Runner runner
        @Delegate Biker biker
    }
    
    def triathlete = new Triathlete(
        swimmer: new Swimmer(),
        runner: new Runner(),
        biker: new Biker()
    )
    
    triathlete.swim()
    triathlete.run()
    triathlete.bike()
    

    In case of a controller, assign the helper class directly at the instance field (or in the nullary constructor):

    class HelperClass {
        def renderFoo() { render 'foo' }
    }
    
    class FooController {
        private @Delegate HelperClass helperClass = new HelperClass()
    
        def index = { this.renderFoo() }
    }
    

    The delegate's type information gets compiled into the containing class.

提交回复
热议问题