1

我一直在转换基于 Java Servlet 的 webapp 作为学习 Spring 的一种方式。我有一个 JSP,其中正在打印一个大数据表。我正在使用 Spring Controller 函数将包装在 HTML 表行中的大数据字符串返回到 JSP,并将其存放到滚动 div 中。

我想改用JQuery EasyUI DataGrid,但我也是 Ajax、JQuery 和 JSON 的新手,所以我对如何完全使用它有点摸不着头脑。

这是一个如何使用 JQuery EasyUI DataGrid 设置空表和列标题的示例:

<table id="tt" title="Frozen Columns" class="easyui-datagrid" style="width:500px;height:250px"  
            url="data/datagrid_data.json"  
            singleSelect="true" iconCls="icon-save">  
        <thead frozen="true">  
            <tr>  
                <th field="itemid" width="80">Item ID</th>  
                <th field="productid" width="80">Product ID</th>  
            </tr>  
        </thead>  
        <thead>  
            <tr>  
                <th field="listprice" width="80" align="right">List Price</th>  
                <th field="unitcost" width="80" align="right">Unit Cost</th>  
                <th field="attr1" width="150">Attribute</th>  
                <th field="status" width="60" align="center">Stauts</th>  
            </tr>  
        </thead>  
    </table>  

这就是您将表格连接到 javascript 功能的方式:

$('#tt').datagrid({  
        title:'Frozen Columns',  
        iconCls:'icon-save',  
        width:500,  
        height:250,  
        url:'data/datagrid_data.json',  
        frozenColumns:[[  
            {field:'itemid',title:'Item ID',width:80},  
            {field:'productid',title:'Product ID',width:80},  
        ]],  
        columns:[[  
            {field:'listprice',title:'List Price',width:80,align:'right'},  
            {field:'unitcost',title:'Unit Cost',width:80,align:'right'},  
            {field:'attr1',title:'Attribute',width:100},  
            {field:'status',title:'Status',width:60}  
        ]]  
    });  

我的第一个问题是,在上面的示例中,我是否会在“url”属性中放置一个类似于“/getTabularData”的 url,然后将其映射到 Spring 3.1 控制器中的函数?如果是这样,什么会触发 DataGrid 向该 URL 发送请求(文档有点简约)。

据我了解,DataGrid 需要像这样包装的数据行

{"total":28,"rows":[
    {"productid":"FI-SW-01","unitcost":10.00,"status":"P","listprice":16.50,"attr1":"Large","itemid":"EST-1"},
    {"productid":"K9-DL-01","unitcost":12.00,"status":"P","listprice":18.50,"attr1":"Spotted Adult Female","itemid":"EST-10"},
    {"productid":"RP-SN-01","unitcost":12.00,"status":"P","listprice":18.50,"attr1":"Venomless","itemid":"EST-11"},
    {"productid":"RP-SN-01","unitcost":12.00,"status":"P","listprice":18.50,"attr1":"Rattleless","itemid":"EST-12"},
    {"productid":"RP-LI-02","unitcost":12.00,"status":"P","listprice":18.50,"attr1":"Green Adult","itemid":"EST-13"},
    {"productid":"FL-DSH-01","unitcost":12.00,"status":"P","listprice":58.50,"attr1":"Tailless","itemid":"EST-14"},
    {"productid":"FL-DSH-01","unitcost":12.00,"status":"P","listprice":23.50,"attr1":"With tail","itemid":"EST-15"},
    {"productid":"FL-DLH-02","unitcost":12.00,"status":"P","listprice":93.50,"attr1":"Adult Female","itemid":"EST-16"},
    {"productid":"FL-DLH-02","unitcost":12.00,"status":"P","listprice":93.50,"attr1":"Adult Male","itemid":"EST-17"},
    {"productid":"AV-CB-01","unitcost":92.00,"status":"P","listprice":193.50,"attr1":"Adult Male","itemid":"EST-18"}
]}

那是格式化JSON吗?

我只能找到 1 - 2个 Spring 3.1 Controller 方法的简短示例,它们将数据作为 JSON 发送回。基本上唯一不同的是返回类型将有一个@ResponseBody。我找到了这个Spring Source Blog Entry,但是像我一样新,这超出了我的理解范围。是否有其他 URL 可以更详细地了解从 Spring 发送 JSON 的信息?

现在,我的应用程序正在从我们的数据库中以 LinkedHashMap 列表的形式检索数据,然后将这些数据放入自制函数中以迭代将每个 LinkedHashMap 包装到 HTML TR 中,并将其全部合并到 StringBuffer 中。

如果我要使用 JQuery EasyUI DataGrid,那么将我的 LinkedHashMap obj 列表获取到 JSON 并将其从 Spring 返回到 jsp 并进入 DataGrid 将是一个好方法。

我讨厌问这么大的“告诉我怎么做”的问题,但我只能通过谷歌找到一点点信息,而且我对我正在使用的所有东西都是新手。

非常感谢您的帮助周末愉快

史蒂夫

4

1 回答 1

1

你非常接近“得到它”。您唯一缺少的是从控制器方法(即生成 JSON)返回的内容。这篇博客文章提供了一个很好的例子来说明你需要做什么。

在您的情况下,您需要创建两个模仿 DataGrid 期望的 JSON 输出的 Java bean:

public class ResultSet {
    private long total;
    private List<ResultRow> rows;
    // getters & setters, etc
}

public class ResultRow {
    private Int productid;
    private Float unitcost;
    private String status;
    private Float listprice;
    private String attr1;
    // getters & setters, etc
}

因此,您的 Controller 方法将具有 ResultSet 的返回类型,并会填充ResultRows 并ResultSet从一些数据库查找等中填充。然后 Jackson 会神奇地将其“编组”到 JSON 中(通过 @ResponseBody 注释)。

于 2012-06-25T06:47:31.800 回答