有人可以向我解释一下 SmartGWT 中的分页是如何工作的吗?
我看到它在 showcase 中工作,但我在任何地方都找不到它的记录。 (javadocs 中的信息远远不足以理解正在发生的事情。)
我有一个 ListGrid 和一个与我的服务器交互的自定义数据源。
假设我想在 ListGrid 中设置 25 条记录的页面大小。
我必须做什么:
SmartGWT 客户端向服务器发送的参数是什么,SmartGWT 客户端期望返回的参数是什么?
如果您使用 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
单击查看源代码按钮并检查 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;
}