2017-07-02 42 views
0

由于缺少“root”元素,我无法填充我的dataTables。DataTables的JSON数据中缺少根元素

请参阅下面的代码,并帮助我如何解决它。

件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:我所doingin我的Struts 2 action类。

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"; 
    } 

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

[{"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; 
} 
+0

你的java代码中'data'的类型是什么?你在这里指的是'data = list;' – Ravi

+0

Hi Ravi,数据是我在我的action类中创建的变量,它有getter和setter。我编辑了这个问题。 –

+0

你可以发布'DensityGroup'类吗? – Ravi

回答

1

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

例如:

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

参见this example代码和示范。

+0

是的,我试过,但它仍然没有填充数据 –

+0

@MittintiRamanaMurthy,增加了一个例子来证明我的解决方案有效。 –

+0

我发现我犯的错误。你是对的。 dataSrc应该在ajax中。 +1 –