我遇到了一个问题,即String参数被截断为g:message标记中的第一个字符(longs / integers似乎很好)。
最终,我发现我们没有在Javascript中调用g:message语法正确,所以一些小调整修复了这个问题。问题是 - 我不明白为什么前者不起作用。
有人能描述这里发生了什么吗?
jQuery("#myId").html("<g:message code='domain.message.path' args="${command?.foo?.name}"/>"); //incorrect, only displays first character of message
jQuery("#myId").html("${g.message(code: 'domain.message.path', args: [command?.foo?.name])}"); //correct, displays full string
答案 0 :(得分:3)
我假设您将此作为.gsp页面的一部分进行渲染?这就是事情。在第一个中,您可以嵌套引号,基本上将$ {}部分留在字符串之外。甚至Stackoverflow都可以告诉;请注意该部分是如何不同的颜色:
jQuery("#myId").html("<g:message code='domain.message.path' args="${command?.foo?.name}"/>");
查看html末尾的引用(由$ {之前的引号结束,将$ {command?.foo?.name}块保留在字符串之外?如果command.foo.name是字符串&# 34; bob&#34;,然后在渲染时,你得到:
jQuery("#myId").html("<g:message code='domain.message.path' args="bob"/>");
你可能认为这看起来是正确的,但是javascript会很难处理这个问题。
如果您使用单引号作为内部字符串,就像使用&#39; domain.message.path&#39;一样,它应该可以正常工作:
jQuery("#myId").html("<g:message code='domain.message.path' args='${command?.foo?.name}'/>");