来自服务的ApplicationTagLib中的createLink

时间:2017-04-27 16:24:20

标签: grails

我正在尝试使用从服务调用的ApplicationTagLib中创建链接来创建链接。

Grails: 3.2.8

代码:

def applicationTag = new ApplicationTagLib()

def abc = application.Tag.createLink(controller:"accomodate", action:"menu", id:4)

错误:

  

org.grails.taglib.GrailsTagException:标签[createLink]不存在。   找不到相应的标签库。

我对这个版本很新。如果你帮助我找出我的代码有什么样的错误,我将非常感激。

1 个答案:

答案 0 :(得分:1)

试试这个:

import grails.core.support.GrailsApplicationAware
import grails.core.GrailsApplication
import grails.web.mapping.LinkGenerator
   class MyService implements GrailsApplicationAware{
      GrailsApplication grailsApplication
      def config
      LinkGenerator grailsLinkGenerator

      def myMethod() {

          def url = hostname+grailsLinkGenerator.link(controller: 'someController', action: 'something', params:[token:something], absolute: 'false')
    }
     void setGrailsApplication(GrailsApplication ga) {
        config = ga.config
    }
}

...

String hostname=grailsApplication.config.myApp?.hostName
        def url=hostname+grailsLinkGenerator.link(controller: 'someController', action: 'something', params:[token:something], absolute: 'false')

def url=grailsLinkGenerator.link(controller: 'someController', action: 'something', params:[token:something], absolute: true)

<强> ED2A 如果你必须

我有这样的applicationTag lib:

import grails.util.Holders
import org.grails.plugins.web.taglib.ApplicationTagLib

 class SomeService { 

 def g = Holders.grailsApplication.mainContext.getBean(ApplicationTagLib)


   def someMethod() {
       def aa = g.createLink('something')
   }
  }

这样做的问题是如果你开始点击表示层引用,那么你可能会得到No thread-bound request found。特别是来自quartz作业和任何在真实用户范围之外调用的东西。您可以使用this example解决所有这些问题。但是,当上面的grailsLinkGenerator示例不会遇到任何可能出现的问题时,为什么要经历所有这些呢?