SmartGWT分页如何工作?

时间:2010-05-20 18:42:04

标签: paging smartgwt

有人可以向我解释一下SmartGWT中的分页是如何工作的吗?

我看到它在showcase中工作,但我无法在任何地方找到它。 (javadocs中的信息远远不足以理解发生了什么。)

我有一个ListGrid,以及一个与我的服务器交互的自定义​​DataSource。

假设我想在ListGrid中设置25个记录的页面大小。

我该怎么做:

    ListGrid中的
  • 在我的自定义DataSource中(可以访问DSRequest和DSResponse对象)?
  • 在我的服务器上?

SmartGWT客户端向服务器发送的参数是什么,以及SmartGWT客户端期望获得的参数是什么?

1 个答案:

答案 0 :(得分:4)

如果您使用的是Smart GWT LGPL:

请阅读RestDataSource的Javadocs,因为它详细解释了这一点:http://www.smartclient.com/smartgwt/javadoc/com/smartgwt/client/data/RestDataSource.html

另请参阅RestDataSource示例:http://www.smartclient.com/smartgwt/showcase/#featured_restfulds

如果您正在使用Smart GWT EE,那么 1)如果您正在使用SQL连接器,那么您需要在服务器上编写0代码,因为Smart GWT服务器端代码负责与数据库表进行数据绑定。 2)如果需要对服务器数据绑定进行模式控制,则可以在滚动(获取)或插入/更新/删除时调用自己的服务器API。请查看此示例的来源:http://www.smartclient.com/smartgwtee/showcase/#javabeans

单击View Source按钮并检查SupplyItemDMI类的源。请注意如何获取请求的起始行,结束行参数。

// By default, for a DSRequest of type "fetch", a method named "fetch" is invoked.  
// You can customize this via the <serverObject> declaration.  
public DSResponse fetch(DSRequest dsRequest)  
    throws Exception {  
   log.info("procesing DMI fetch operation");  

    // Fetch a List of matching SupplyItem Beans from some pre-existing Java object model  
    // provided by you, represented by "SupplyItemStore" in this example  
    List matchingItems =  
        SupplyItemStore.findMatchingItems((Long) dsRequest.getFieldValue("itemID"),  
                (String) dsRequest.getFieldValue("itemName"));  

    // this implementation shows data paging (returning only ranges of requested records)  
    long startRow = dsRequest.getStartRow();  
    long endRow = dsRequest.getEndRow();  

    long totalRows = matchingItems.size();  
    DSResponse dsResponse = new DSResponse();  
    dsResponse.setTotalRows(totalRows);  
    dsResponse.setStartRow(startRow);  

    endRow = Math.min(endRow, totalRows);  
    dsResponse.setEndRow(endRow);  

    // trim the data to the requested range of records.  In a real application, the startRow  
    // and endRow would be passed to the ORM layer or to SQL for maximum efficiency.  
    List results;  
    if (totalRows > 0) {  
        results = matchingItems.subList((int) dsResponse.getStartRow(),  
                (int) dsResponse.getEndRow());  
    } else {  
        results = matchingItems;  
    }  

    // just return the List of matching beans  
    dsResponse.setData(results);  

    return dsResponse;  
}