需要将Java中的数组传递给javascript

Nik*_*esh 1 javascript java playframework

我正在使用Play Framework 1.x.

有没有办法将数组从控制器传递给模板作为Javascript数组?

Dre*_*w H 6

当你从javascript到Java进行POST或GET时,Play会自动映射你的参数.您可以使用renderJSON方法将对象从Java传递到javascript.然后使用像jQuery这样的东西将它映射到数组.也许如果你给我们一些背景信息,我们可以帮助你一点点.

    public static void getContactsTable() {
    List<Contacts> contacts = Contacts.findAllOrderByInserted();
    renderJSON(contacts);
}
Run Code Online (Sandbox Code Playgroud)

然后将其映射到路线.

 $.getJSON("@{ViewContacts.getContactsTable()}", function(data) {                  
        var series = { 
            data: []
        };    
        $.each(data, function(index, item) {            
            series.data.push([parseInt(item.date), item.qty]);                
        }); 

        options.series.push(series);

        var chart = new Highcharts.Chart(options);
    });    
Run Code Online (Sandbox Code Playgroud)

这是我所做的高图表的一个小例子.

这是另一个以另一种方式然后再发送数据以在页面上呈现的示例.

    public static void testing(List<Long> selected) {

    List<Contacts> contacts = new ArrayList<Contacts>();

    for (Long index : selected) {
        Contacts contact = contactService.findById(index);
        contacts.add(contact);
    }
    renderJSON(contacts);
}
Run Code Online (Sandbox Code Playgroud)

这需要一个javascript数组.如您所见,映射会自动将其映射为列表.你也可以拥有一个java数组.

这是javascript函数.

       var template = 'selectedTemplate';
 var selectedOutput = '#selectedOutput';
        $.post('@{ViewContacts.testing()}',{ selected : selected }, function(data) {
                    $(selectedOutput).html(tmpl(template, { items:data }));  
                });

    <div id="selectedOutput">
        <script id="selectedTemplate" type="text/html">

            <% for (var i = 0; i < items.length; i++) { 
            var item = items[i];
            %>

            <li><%= item.name %> - <%= item.email %></li>
            <% } %>  

        </script>
    </div>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这也是一个ajax请求.我正在获取所选数据(这只是一个选定节点的数组),然后将其传递给函数.然后我获取数据(函数(数据))并将其映射到items数组.我正在使用ejohn作为模板.