开发者

Correctly pass a Groovy list to Javascript code in GSP

开发者 https://www.devze.com 2022-12-17 11:10 出处:网络
I\'m making a web application with Grails. I\'ve got a list with data that must be included on JavaScript to perform some dynamic load on <select> drop-list. Basically, I\'m getting a two level

I'm making a web application with Grails. I've got a list with data that must be included on JavaScript to perform some dynamic load on <select> drop-list. Basically, I'm getting a two level list from the server, then the first level is presented on a drop box. When the user selects an option, the list associated to this option is presented on another drop box.

The (simplified) code on the gsp page for the JavaScript function is the following

function selecTipe() {
        var types = ${typeList}
        alert('List of types ' + types )

The problem is that, if typeList is defined (in Groovy) as

typeList = [['TYPE1', ['VAR1','VAR2','VAR3']], 
            ['TYPE2', ['VAR1','VAR2','VAR3']]
            ['TYPE3', ['VAR1','VAR2','VAR3']] ]

when the page is renderized, the JavaScript code appears like

function selecTipe() {
        var types = [[ TYPE1, [ VAR1, VAR2, VAR3 ]], 
                     [ TYPE2, [ VAR1, VAR2, VAR3 ]]
                     [ TYPE3, [ VAR1, VAR2, VAR3 ]] ]
        alert('List of types ' + types )
开发者_运维知识库

which is erroneous, as JavaScript treats then not as strings, but as references due the lack of quotes.

Is there any way to force Groovy to print a list of arrays with quotes or any other easy way to achieve this?

PD: I can make an specific function to achieve it, but I think it should be an easy way to do that...

EDIT: I've added the complete data structure, as is a little more complex than a simple list


Try this in your grails controller's action :

def types = ['TYPE1', 'TYPE2', 'TYPE3'] as grails.converters.JSON
[typeList : types]


Try this in your grails controller's action :

def types = ['TYPE1', 'TYPE2', 'TYPE3'] as grails.converters.JSON
[typeList : types]

If someone has a object, this will work in your gsp:

<g:javascript>
    var types = JSON.parse('${typeList}');
    alert("Type id:" + types[1].id);
</g:javascript>
0

精彩评论

暂无评论...
验证码 换一张
取 消