我的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类来执行上述操作?
感谢。
答案 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。