Differences between action and methods in Grails controllers

后端 未结 3 1640
执笔经年
执笔经年 2021-01-27 04:00

As far as I know, if I want to create an action in a controller then I can do it by:

class My Controller {
    def myAction = {
      println \"in my action \"
          


        
相关标签:
3条回答
  • 2021-01-27 04:22

    I'm not sure, but I think that it used to be the first way was the only way to do it, and then it changed to allow the second way. I think that the second way is the preffered way, but I'm not sure.

    [Edit]

    Here is another stack overflow post further explaining it:

    Why should grails actions be declared as methods instead of closures and what difference does it make?

    0 讨论(0)
  • 2021-01-27 04:35

    Leveraging methods instead of actions(Closure properties) has some advantages:

    1. Memory efficient
    2. Allow use of stateless controllers (singleton scope)
    3. You can override actions from subclasses and call the overridden superclass method with super.actionName()
    4. Methods can be intercepted with standard proxying mechanisms, something that is complicated to do with Closures since they're fields.

    Please visit following link for more information.

    Grails controllers

    0 讨论(0)
  • 2021-01-27 04:39

    The first implementation was defining public closures in the controller, the second is to use public methods.

    The second way was introduced in grails 2, and is widely considered to be the best way.

    A couple of reasons i can think of from the top of my head:

    • Especially in recent versions of grails, using methods allows you to take advantage of Traits.
    • You can use inheritance to organize your methods
    • it has to be more efficient

    UPDATE: Why should grails actions be declared as methods instead of closures and what difference does it make?

    0 讨论(0)
提交回复
热议问题