如何在JavaScript中访问Grails变量?

时间:2011-11-18 11:59:06

标签: javascript grails

我的Grails应用BootStrap.groovy中有一个变量:

      class BootStrap {
      def init = { servletContext ->
      def testGrails = "11"

如果此测试值为11,我想显示JavaScript alert()

我的JavaScript:

           <SCRIPT LANGUAGE="JavaScript">
           if(testGrails==11)   // WHAT TO WRITE WITH IN THE BRACKETS ...?
           {
               alert("yes");
           }        

如何在Javascript中访问Grails类来执行上述操作?

感谢。

3 个答案:

答案 0 :(得分:10)

首先 - 您必须从其他地方访问此变量。目前,它与init范围有关。例如,您可以将其置于全局配置中(请参阅Config.groovy)。或设置为服务。或者在某个地方制作public static变量。

服务示例:

class VariableHOlderService {

    def testGrails

}

class BootStrap {

      VariableHolderService variableHolderService

      def init = { servletContext ->
          VariableHolderService.testGrails = "11"
}

第二 - 你需要把它提出来。有两种方法 - 使用过滤器或控制器/动作。当您想要使用来自不同GSP的相同变量时,第一个选项很有用。

从控制器中可以看出:

VariableHolderService variableHolderService

def myAction = {
    render model: [testGrails:variableHolderService.testGrails]
}

并在GSP上使用

<g:javascript>
       if(${testGrails}==11)   
       {
           alert("yes");
       }    
</g:javascript>

答案 1 :(得分:2)

您应该在Config.groovy中定义您的变量,而不是在Bootstrap中定义。然后你可以在gsp文件中访问它,如下所示:

       <SCRIPT LANGUAGE="JavaScript">
       if(${grailsApplication.config.testGrails}==11)
       {
           alert("yes");
       }        

答案 2 :(得分:1)

您确定在Bootstrap.groovy中需要吗?这是你计算或可以改变的东西吗?

如果答案是否定的,我发现meta标记对于获取GSP文件中的信息非常有用。

例如,如果您需要应用程序名称,可以这样:

<g:meta name="app.name"/>

您可以在application.properties文件中获取任何属性。

如果你像我一样,需要将它连接到另一个值,这是我的例子。请记住,任何标记都可以用作没有g:命名空间的方法。例如:

<g:set var="help" value="http://localhost:8080/${meta(name:"app.name")}/help" />

Grails关于此的文档有点差,但它是here