【问题标题】:Root element missing in JSON data for DataTables [duplicate]DataTables的JSON数据中缺少根元素[重复]
【发布时间】:2017-12-06 00:36:03
【问题描述】:

由于缺少“根”元素,我无法填充我的数据表。

请查看下面的代码并帮助我解决它。

第 1 部分:

  $('#example').DataTable({
       //"ajax": "density.txt",
       "ajax" : "getProductPropData",
       "dataType": 'json',
       "contentType": "application/json; charset=utf-8",
        "columns": [{
            "data": "densityId"
        }, {
            "data": "densityDescription"
        }, {
            data: null,
            className: "center",
            defaultContent: '<a href="#" id="edit" class="edit" data-toggle="modal" data-target="#myModal">Edit</a> / <a href="#" id="delete">Delete</a>'
                //defaultContent: '<button type="button" class="btn-default" data-toggle="modal" data-target="#myModal">Open Modal</button>'
        }]
    });

第 2 部分:我在 Struts 2 动作课程中所做的事情。

public String execute() throws Exception {

    SessionFactory sf = (SessionFactory) ctx.getAttribute("SessionFactory");
    ProductPropertyDAO pdao = new ProductPropertyDAOImpl(sf);
    List<DensityGroup> dg = pdao.getProductPropListData("Density");

    List<DensityGroup> list = new ArrayList<DensityGroup>();
    System.out.println("SIZE is: " + dg.size());

    for (int i = 0; i < dg.size(); i++) {
        DensityGroup denpojo = new DensityGroup();
        denpojo.setDensityId(dg.get(i).getDensityId());
        denpojo.setDensityDescription(dg.get(i).getDensityDescription());
        list.add(denpojo);
    }

    data = list;

    System.out.println("JSON is :\n" + data);
    return "success";
  }

Chrome 网络标签中的我的 JSON 数据是:

[{"densityDescription":"16 KG","densityId":"21"},
{"densityDescription":"Chitti","densityId":"22"}]

正确的数据应该是:

{"data" : [{"densityDescription":"16 KG","densityId":"21"},
{"densityDescription":"Chitti","densityId":"22"}]}

编辑数据变量:

private List<DensityGroup> data;

    public List<DensityGroup> getData() {
        return data;
    }

    public void setData(List<DensityGroup> data) {
        this.data = data;
    }

DensityGroup.java

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name="DENGROUP")
public class DensityGroup{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    @Id
    @Column (name = "DEN_ID")
    @SequenceGenerator(name="dengroupSeq",sequenceName="density_group_seq")
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="dengroupSeq")


    private String densityId;
    public String getDensityId() {
        return densityId;
    }
    public void setDensityId(String densityId) {
        this.densityId = densityId;
    }
    public String getDensityDescription() {
        return densityDescription;
    }
    public void setDensityDescription(String densityDescription) {
        this.densityDescription = densityDescription;
    }
    @Column (name = "DEN_DESC")
    private String densityDescription;
}

【问题讨论】:

  • 你的java代码中data的类型是什么?你在这里指的是data = list;
  • 嗨 Ravi,data 是我在动作类中创建的变量,它有 getter 和 setter。我已经编辑了问题。
  • 你能发DensityGroup 类吗?
  • 是的,现在添加了
  • 你可以试试我的解决方案。

标签: java json ajax struts2 datatables


【解决方案1】:

使用ajax.dataSrc 选项设置为空字符串。

例如:

"ajax" : {
   "url": "getProductPropData",
   "dataSrc": "",
   "dataType": 'json',
   "contentType": "application/json; charset=utf-8"
}

有关代码和演示,请参阅 this example

【讨论】:

  • 是的,我试过了,但仍然没有填充数据
  • @MittintiRamanaMurthy,添加示例以证明我的解决方案有效。
  • 我发现了我做的错误。你是对的。 dataSrc 应该在 ajax 里面。 +1
猜你喜欢
  • 2012-04-24
  • 1970-01-01
  • 2016-05-10
  • 2012-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多