在Javascript中动态使用g:message

时间:2014-10-20 15:11:57

标签: javascript grails

有一种在Javascript中以动态方式使用g:message功能的简单方法,例如

function get_i18n( myAttr ) {

   return "${message(code:'" + myAttr + "')} ";

}

这样我就可以执行函数调用

pl_get_i18n( "xyz" )

用于预定义的i18属性xzy?

就像这里一样,但动态:https://stackoverflow.com/a/8296812/1779814

PS:JS代码包含在GSP文件中。

2 个答案:

答案 0 :(得分:2)

简短的回答是" no"。 GSP标签只能在服务器端执行,而不能由浏览器(即JavaScript)执行。

但是,我希望至少有一个Grails插件可以执行以下操作:

  • 创建一个JavaScript对象,其中包含messages*.properties文件中定义的消息
  • 提供了一个JavaScript函数,使您可以解析来自此对象的消息

因此,尽管在浏览器中无法执行GSP标记,但在JavaScript中提供等效功能似乎并不十分困难。如果没有Grails插件可以执行此操作,我会感到惊讶。

答案 1 :(得分:2)

这是一个非常简单的例子,说明如何使用AJAX从服务器获取消息代码。

// AjaxMessageController.groovy
package example

import grails.converters.JSON

class AjaxMessageController {
    def index() {
        render [message: message(code: param.code)] as JSON
    }
}

然后在您的页面中,您可以在此示例中使用ajax调用(基于jQuery)来查找消息代码:

var someMessageCode = 'something.you.want';
$.ajax({
    dataType: 'json',
    url: '${createLinK(controller: "ajaxMessage", action: "index"}',
    data: {code: someMessageCode},
    success: function(data) {
        window.alert(data.message);
    }
});