如何使用arraylist填充数据表

时间:2018-07-12 15:58:29

标签: javascript java spring-mvc jsp datatables

我有一个从控制器返回到jsp的arraylist,现在我想使用该arraylist填充数据表。 这是我所做的,但是没有用:

$(document).ready(function() {
  //grpAlphaInfoVO is the arraylist returned by my controller
  $('#groupAlphaList').dataTable({
    "aaData": "${grpAlphaInfoVO}"
  });
});

这是我的控制器代码:

@RequestMapping(value = "/groupAlpha/search/{groupName}", method = { RequestMethod.GET, RequestMethod.POST })
public ModelAndView groupAlphaHandler(@PathVariable("groupName") String groupName, HttpServletRequest request) {

    ArrayList<GroupAlphaInfoVO> grpAlphaInfoVO = groupAlphaService.loadGroupAlphaSearchResult(groupName);
    if(grpAlphaInfoVO != null) {
        ModelAndView mav = new ModelAndView("group-alpha");
        mav.addObject("grpAlphaInfoVO", grpAlphaInfoVO);
        mav.addObject("pageTitle", "Group Alpha");
        return mav;
    }
}

3 个答案:

答案 0 :(得分:0)

首先,您需要将JAVA ArrayList转换为JSON。

为此,您可以使用GSON库。

JAVA代码将列表转换为JSON:

imageIndex--;
myImage.setAttribute("style",imageArray[imageIndex]); 

输出:

public class Test {

    static class Entry{
        String data1;
        Entry(String data1){
            this.data1 = data1;
        }
    }
    public static void main(String[] args) {
        List<Entry> data = new ArrayList<>();
        data.add(new Entry("somevalue"));
        data.add(new Entry("otherRandomValues"));
         String json = new Gson().toJson(data);
         System.out.println(json);
    }

}

然后需要使用[{"data1":"somevalue"},{"data1":"otherRandomValues"}] 将数据从Servlet传输到JSP,其中<%= grpAlphaInfoVOJSONString %>是控制器中具有JSON字符串的变量的名称

请参考下面的链接以获得更好的理解:

Transferring data from servlet to jsp page

然后您需要使用JSON来实现数据表,如下例所示:

grpAlphaInfoVOJSONString
$(document).ready(function() {
var grpAlphaInfoVOJSON = [{"column1":"somevalue"},{"column1":"otherValues"}];
  //grpAlphaInfoVO is the arraylist returned by my controller
  $('#groupAlphaList').dataTable({
    "data": grpAlphaInfoVOJSON,
    "columns" : [
            { "data" : "column1" }
            ]
  });
});

答案 1 :(得分:0)

编辑:

问题的解决方案:

$('#groupAlphaList').dataTable({
 "aaData": ${grpAlphaInfoVO} , 
 "aoColumns": [ { "mDataProp": "groupNumber" }, { "mDataProp": "groupName" } ]
});

原始答案:

添加jQuery JavaScipt来调用您的控制器:

http://api.jquery.com/jquery.ajax/

$(document).ready(function() {
    $.ajax({
       type: "GET",
       url: "/groupAlpha/search/groupNameValue",
       datatype: 'json',
       success: function (response) {
           grpAlphaInfoVO = response.grpAlphaInfoVO;
           $('#groupAlphaList').dataTable({
              "aaData": grpAlphaInfoVO
           });
       }
    });
});

@RequestMapping定义终点。它声明服务器端代码具有一种可以处理对/ groupAlpha / search / {groupName} URL的请求的方法。这是一个声明,而不是对控制器的实际调用。

任何其他应用程序(Web浏览器,wget,Java应用程序,.NET应用程序,脚本都可以调用使用@RequestMapping声明的端点)。

您的JavaScript代码需要调用控制器。可以使用JQuery $.ajax函数。

答案 2 :(得分:0)

找到了解决我问题的方法,我们在填充数据表时还需要指定列:

由于我在json中有两个键,分别是groupNumber和groupName,因此我也需要在数据表中包括它们。这是示例代码

$('#groupAlphaList').dataTable({
 "aaData": ${grpAlphaInfoVO} , 
 "aoColumns": [ { "mDataProp": "groupNumber" }, { "mDataProp": "groupName" } ]
});