【问题标题】:JSON data from servlet to jqGrid not displaying从 servlet 到 jqGrid 的 JSON 数据不显示
【发布时间】:2013-10-01 01:49:17
【问题描述】:

我是 jQuery 新手,在我的 jsp 中将数据从我的 servlet 显示到 jqGrid 时遇到困难。 我使用 google gson 将数据从 ArrayList 转换为字符串变量 json。 当我运行项目并显示一个空网格时,它在控制台中显示 json 数据。

学生.java

package com
public class Student {
private String name;
 private String mark;
 private String address;
//getter and setters

StudentDataService.java

package com;

import java.util.ArrayList;
import java.util.List;

import com.Student;

public class StudentDataService {

public static List<Student> getStudentList() {

      List<Student> listOfStudent = new ArrayList<Student>();

      Student aStudent = new Student();

      for (int i = 1; i <= 10; i++) {

       aStudent = new Student();

       aStudent.setName("R" + i);

       aStudent.setMark("20" + i);

       aStudent.setAddress("pune "+i);

       listOfStudent.add(aStudent);
      }

      return listOfStudent;

     }
}

我的 servlet 代码:

StudentDataServlet.java

package com;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.Student;
import com.StudentDataService;

/**
 * Servlet implementation class StudentDataServlet
*/
public class StudentDataServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

public StudentDataServlet() {
    super();
}

protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException     { 

    response.setContentType("application/json");
    PrintWriter out = response.getWriter();

    List<Student> lisOfStudent = StudentDataService.getStudentList();
    Gson gson = new GsonBuilder().setPrettyPrinting().create();
    String json = gson.toJson(lisOfStudent);
    out.print(json);
    System.out.println(json);

}

protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException    {

    doGet(request, response);
}
 }

我的 JSP 页面:

slickGridDemo.jsp

<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>jqGrid Example</title>
<script type='text/javascript' src='http://code.jquery.com/jquery-1.6.2.js'></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/
libs/jqueryui/1.8.14/jquery-ui.js"> 
</script>
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/themes/base/jquery-ui.css">
<link rel="stylesheet" type="text/css"  href="http://trirand.com/blog/jqgrid/themes/ui.jqgrid.css">
<script type='text/javascript' src="http://trirand.com/blog/jqgrid/js/i18n/grid.locale-  en.js"></script>
<script type='text/javascript'  src="http://trirand.com/blog/jqgrid/js/jquery.jqGrid.min.js"></script>
<style type='text/css'>
</style>



<script type='text/javascript'>
jQuery(document).ready(function () {

         jQuery("#grid").jqGrid({
             url: "http://localhost:9080/JquerySlickGrid/StudentDataServlet",
             datatype: "json",

             jsonReader: {repeatitems: false, id: "ref"},
             colNames:['Name','Marks', 'Address'],
             colModel:[
                 {name:'Name',index:'Name', width:100},
                 {name:'Marks',index:'Marks', width:100},
                 {name:'Address',index:'Address', width:500}
             ],
             rowNum:20,
             rowList:[20,60,100],
             height:460,
             pager: "#pagingDiv",
             viewrecords: true,
             caption: "Json Example"
         });
     });
</script>
</head>
<body>
<table id="grid"></table>
<div id="pagingDiv"></div>
</body>
</html>

【问题讨论】:

    标签: java jquery jsp servlets jqgrid


    【解决方案1】:

    我最初也有同样的问题。我解决了将 json 转换为本地数据的问题,这就是我将 json 数据填充到 jqgrid 中的方式。它可能对你有帮助。

    function getReport() {
    $.ajax({
                url : "totalSalesReport.do?method=searchSpendReport"
        type : "POST",
        async : false,
        success : function(data) {
            $("#gridtable").jqGrid('GridUnload');
    
                       var newdata = jQuery.parseJSON(data);
    
                    $('#gridtable').jqGrid({
                data : newdata,
                datatype : 'local',
                colNames : [ 'Name', 'Year', 'Period'],
                colModel : [ {
                    name : 'name',
                    index : 'name'
                }, {
                    name : 'year',
                    index : 'year'
                }, {
                    name : 'period',
                    index : 'period'
                }],
                rowNum : 10,
                rowList : [ 10, 20, 50 ],
                pager : '#pager',
                shrinkToFit : false,
                autowidth : true,
                viewrecords : true,
                height : 'auto'
            }).jqGrid('navGrid', '#pager', {
        add : false,
        edit : false,
        del : false,
        search : false,
        refresh : false
    },
    
    {}, /* edit options */
    {}, /* add options */
    {}, /* del options */
    {});
    }});}
    

    如果您在从 jsp 页面获取数据方面需要进一步帮助,请告诉我。

    更新答案:

    我正在使用 jsp 将 List 数据格式化为 json 数组。下面给出了这段代码。为此,您需要添加 json 对象 jar 文件。

    <%@page import="java.sql.ResultSet"%>
    <%@page import="java.util.*,java.util.ArrayList"%>
    <%@page import="org.json.simple.JSONObject"%>
    <%
    net.sf.json.JSONObject responcedata = new net.sf.json.JSONObject();
    net.sf.json.JSONArray cellarray = new net.sf.json.JSONArray();
    net.sf.json.JSONArray cell = null; //new net.sf.json.JSONArray();
    net.sf.json.JSONObject cellobj = null; //new net.sf.json.JSONObject();
    
    List<ReportDto> reportDtos = null;
    if (session.getAttribute("agencyReport") != null) {
        reportDtos = (List<ReportDto>) session
        .getAttribute("agencyReport");
    }
    
    ReportDto reportDto = null;
    
    int i = 0;
    if (reportDtos != null) {
        for (int index = i; index < reportDtos.size(); index++) {
            reportDto = reportDtos.get(index);
            cellobj = new net.sf.json.JSONObject();
            cell = new net.sf.json.JSONArray();
            cellobj.put("name", reportDto.getVendorName());
            cellobj.put("year", reportDto.getSpendYear());
            cellobj.put("period",reportDto.getReportPeriod());
            cellarray.put(cellobj);
            i++;
        }
        out.println(cellarray);
    }
    %>
    

    【讨论】:

    • 尽管我打印时它显示在控制台中,但仍然无法获取网格上的值。 var newdata = jQuery.parseJSON(data) 是您作为“数据”传递的 json 字符串吗?您是否从某些 struts DispatchAction 方法打印值?由于我是 struts 新手,所以 URL 看起来很熟悉。
    • 是的,我正在使用 struts。你可以发布你的json数据吗?没有数据诊断变得困难..
    • 我已经更新了我的答案。我正在使用 json 数组和 POJO 类(ReportDto)。如果您想使用 Json 数据,请正确配置您的 json 地图阅读器。使用以下链接。 Retrieve Data
    • [ { "name": "Roikka1", "mark": "201", "address": "chennai 1" }, { "name": "Roikka2", "mark": " 202”,“地址”:“钦奈 2”},{“名称”:“Roikka3”,“标记”:“203”,“地址”:“钦奈 3”},{“名称”:“Roikka4”,“标记”:“204”,“地址”:“钦奈 4”},{“名称”:“Roikka5”,“标记”:“205”,“地址”:“钦奈 5”},{“名称”:“ Roikka6", "mark": "206", "address": "chennai 6" } { "name": "Roikka7", "mark": "207", "address": "chennai 7" }, ]跨度>
    • 我希望你的 json 数据有问题。使用此链接验证您的 json。 validate json
    【解决方案2】:

    更改您的 colModel 名称和索引与 pojo 类变量名称相同

    谢谢, 阿米特库马尔

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      相关资源
      最近更新 更多