当前位置: 首页 > 知识库问答 >
问题:

在Grails控制器中使用Groovy特性

黄查猛
2023-03-14

我想在Grails控制器中使用Groovy特性,如下所示:

trait ColumnSelectionController {
    def selectColumns() {
        //Do something here
    }
}

class MyController implements ColumnSelectionController {
    def index() {
        //Calculate list model
    }
}

然而,当我在Grails中运行此操作时,“selectColumns”操作不可见,我从Grails得到了404响应。我怀疑我需要对trait做些什么,以便它内部定义的方法在实现类中被识别为动作。有人知道这可能是什么吗?

编辑1:

更多信息:trait是在src/Groovy中定义的,而不是在grails-app/控制器中定义的,因此它没有定义为人工制品。

编辑2:

此外,如果我将trait更改为一个类,用@Artefact注释对其进行标记,并更改MyController来扩展这个类,一切都会按预期工作。试图在特征上使用@Artefact注释没有任何作用(这并不奇怪)。

共有1个答案

方和顺
2023-03-14

只需在trait中定义的方法上定义@Action注释,这将使该方法作为控制器的Action工作(当trait实现时)

import grails.web.Action

trait ColumnSelectionController {

  @Action
  def selectColumns() {
     //Do something here
  }
}

希望这有帮助。

 类似资料:
  • 我如何在我的Grails Spock测试中实现Groovy的新特性?每次我尝试,我都会得到一个看起来像这样的堆栈跟踪。Groovy路径是否有一些我可能不知道的限制? JDK 版本: Groovy Verison: Grails版本: 简化代码: } 堆栈跟踪:

  • 问题内容: 我想使用Redis功能,例如MVC控制器中的位字段和哈希字段。我知道ASP.NET核心中内置了缓存支持,但这仅支持基本的GET和SET命令,而不支持我的应用程序中所需的命令。我知道如何从普通(例如控制台)应用程序中使用StackExchange.Redis,但是我不确定如何在ASP站点中进行设置。 我应该将所有连接初始化代码放在哪里,以便以后可以从控制器访问它?这是我将使用依赖项注入的

  • 问题内容: 我写了一个过滤器函数,它将根据您传递的参数返回数据。我希望控制器具有相同的功能。是否可以在控制器中重用过滤器功能? 到目前为止,这是我尝试过的: 问题答案: 将 $ filter 注入控制器 然后,无论您想在哪里使用该过滤器,都可以像这样使用它: 如果要将参数传递给该过滤器,请使用单独的括号进行处理: 您要过滤的数组在哪里,并且是用于过滤的对象。

  • Groovy/Grails Tool Suite (GGTS)是一个不带所有插件的较小版本(但是你可以手动安装它们),但它会为Groovy和Grails的开发进行预配置:使用Groovy 1.8的Groovy-Eclipse、Grails IDE、tc Server integration和针对tc Server Developer Edition 2.7.0和Grails 2.0.4的运行时。

  • 问题内容: 我正在开发一个使用大量ajax的grails应用程序。如果请求是ajax调用,那么它应该给出响应(这部分正在工作),但是如果我在浏览器中输入URL,它应该带我到主页/索引页面而不是请求的页面。下面是Ajax调用的示例gsp代码。 如果我们在浏览器URL栏中键入http:// localhost:8080 / Dash / todo / list ,则控制器应重定向到http:// lo