g:message 在 Javascript / jQuery 中带有参数的参数无法按预期工作

g:message with arguments inside Javascript / jQuery not working as expected

本文关键字:参数 工作 message Javascript jQuery      更新时间:2023-09-26

我遇到了一个问题,字符串参数被截断为g:message标签中的第一个字符(longs/integer似乎很好(。

最终,我发现我们并没有从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

我假设您将其呈现为 .gsp 页面的一部分? 事情是这样的。 在第一个中,您正在嵌套引号,基本上将 ${} 部分排除在字符串之外。 甚至Stackoverflow也能看出来;请注意该部分是不同的颜色:

jQuery("#myId").html("<g:message code='domain.message.path' args="${command?.foo?.name}"/>"); 
看看 html( 末尾的引号如何以 ${

之前的引号结尾,留下 ${命令?。噗?。名称} 字符串之外的块? 如果 command.foo.name 是字符串"bob",那么当它呈现时,你会得到:

jQuery("#myId").html("<g:message code='domain.message.path' args="bob"/>");

你可能认为这看起来是正确的,但javascript会处理得很糟糕。

如果你对内部字符串使用单引号,就像你对'domain.message.path'所做的那样,它应该可以正常工作:

jQuery("#myId").html("<g:message code='domain.message.path' args='${command?.foo?.name}'/>");