grails taglib从控制器获取列表

grails taglib从控制器获取列表,grails,Grails,我看到多纳尔的一篇帖子,我想他也在问同样的问题,但没有真正回答这个问题,有点困惑,不知道是否可能 若我有一个标记库,那个么用户提供了我希望的控制器操作,然后它离开查询控制器并以列表的形式返回结果,我尝试了g.include,但并没有成功。我尝试在下面对此进行扩展,但不太了解,如果可能的话,可以从控制器中给定的primaryAction或def值中实际获取一个值 if (attrs.primaryController && attrs.primaryAction ) {

我看到多纳尔的一篇帖子,我想他也在问同样的问题,但没有真正回答这个问题,有点困惑,不知道是否可能

若我有一个标记库,那个么用户提供了我希望的控制器操作,然后它离开查询控制器并以列表的形式返回结果,我尝试了g.include,但并没有成功。我尝试在下面对此进行扩展,但不太了解,如果可能的话,可以从控制器中给定的primaryAction或def值中实际获取一个值

if (attrs.primaryController && attrs.primaryAction ) {
                //def nlist= g.include(controller:'${attrs.primaryController}', action:'${attrs.primaryAction}',  id:'${attrs?.primaryId}')

                def controllerArtefact = grailsApplication?.getArtefactByLogicalPropertyName("Controller", "${attrs.primaryController}")
                def controllerClass = controllerArtefact?.getClazz()
                def aaa=controllerClass.declaredFields.each {
                     it.name=="${attrs.primaryAction}" } 

                    println "-->"+aaa.getMetaPropertyValues().


                println "-------------????? ${aaa}"

}
我还认为另一种方法可能是,加载包含taglib的gsp的控制器应该能够轻松地将列表作为变量传递给taglib,然后taglib接受attrs.newList并将其表示为list


这样做,插件抱怨没有id,这真的很奇怪,因为插件内生成的典型列表看起来完全相同。

在我看来,您真正想要的是某种AJAX功能。由于taglib是在原始请求期间在服务器上执行的,因此一旦加载页面,它就无法响应用户交互。因此,您所说的处理也可以由服务该页面的控制器(在服务中)完成。但是如果您希望用户与页面交互,然后更改页面的一部分,那么您必须使用AJAX并调用另一个控制器返回“结果列表”。您不需要在标记库中调用控制器!您好,Nicdos,感谢您的反馈,尽管我怀疑这是可能的,简而言之,这是在一个插件中,最终用户可以在他们自己的项目中发送任何给定的控制器/操作。然后,提供的操作/控制器将不会呈现,而是返回一个列表。除非您的代码直接与
HttpServletRequest
交互并使用GSP呈现输出,否则您应该使用
服务
。您的
taglib
可以很容易地注入服务(只需在taglib顶部插入
def myService
),然后它就可以生成
taglib
可以呈现的结果列表(返回类型
list
)。无需使用
getArtefactByLogicalPropertyName
等。Thsnks Nick插件已经基于它们在gsp中调用时提供的域类完成了这项工作。这是最终用户的请求。而是通过自己的控制器提供值。所以本质上我不能注入他们的服务,因为插件已经构建好了。我试着看看Eok现在是否有可能解决这个问题-用户可以定义自己的列表并将其传递给标记库。我重新审视了这个问题,并认为这是因为我在上一次尝试中忘记了正确设置搜索/收集字段。作为0.42 AjaxDependencySelection插件的一部分支持