【问题标题】:Using "<g:message tag in javascript在 javascript 中使用 "<g:message 标签
【发布时间】:2015-05-06 13:23:04
【问题描述】:

我想在 javascript 中使用下面的标签来读取资源包的值。

var myText = "<g:message code='${steps[i].text}' />" ;

steps[i].text 不是静态的,并且会不断变化,这就是为什么我需要将“steps[i].text”的值传递给资源包的原因。

如果我使用,

var myText = "<g:message code='a.b.key' />" ;

然后它工作正常。 但是对于下面的行,它会给出如下错误:

var myText = "<g:message code='${steps[i].text}' />" ;

org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException: Error executing tag <g:render>: Error executing tag <r:script>: Error evaluating expression [steps[i].text] on line [393]: Cannot get property 'null' on null object

我的代码位于能够读取资源包的 .gsp 文件中。

【问题讨论】:

  • 您的模型中的steps[i].text 是在服务器端还是在客户端?消息标签是服务器端的,不能与代码参数的客户端值一起使用。
  • 是的 steps[i].text 来自服务器端,但在客户端我得到了正确的。因为如果我不进行本地化,那么我可以在我的页面上正确地看到该值。

标签: java javascript grails internationalization gsp


【解决方案1】:

问题在于,当您渲染 gsp grails 时,会转换相应消息中的 g:message,但不会转换相应标签中的 ${steps[i].text}。

也许你可以使用消息标签的参数来解决问题:

.gsp

<g:message code='a.b.key' args="[i]" />

.messages.properties

a.b.key = whatever {0} means

【讨论】:

  • steps[i].text 是完全未知的值。只能在运行时读取。 steps[i].text 来自后端。我可以做 alert(steps[i].text) 并且价值得到正确。这就是为什么我不能使用
【解决方案2】:

也许这对你有用:

var myText = "${g.message(code:steps[i].text)}";

我在这里假设“步骤”是服务器端变量,而不是 javascript 变量。

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    相关资源
    最近更新 更多