Dorado 5 : 5.10.DODataset (RF1)

DODataset的使用方式与CustomDataset基本上是一样的,比较两种类型Dataset的属性,可以看到DODataset多了一个contextAttribute属性和supportsPaging属性。
contextAttribute是用来设置与DODataset进行数据交换的上下文属性名。当我们设定了此属性之后DODataset会在执行装载数据时自动到上下文对象的该属性中寻找DO类型的数据, 如果找到了相应的数据将自动尝试将其装载到DODataset中; 在执行数据更新时DODataset会自动尝试将数据更新到上下文中存贮的数据对象上。接下来我们通过一个例子来说明这个属性的使用方法。
1.还是采用我们在CustomDataset里做的那个页面,新建一个DODataset名为datasetTest,把在datasetUser上的所有属性移到datasetTest上(listener除外),删除datasetUser。并将datasetTest的contextAttribute属性设置为"testParam",同时将Controls节点下的DataTable所绑定的dataset改为datasetTest。如下图:

图表 53
2.添加一个Servlet,代码如下:

package test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet {

protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
List ls = new ArrayList();
for (int i = 0; i < 10; i++) {
UserInfo user = new UserInfo();
user.setId(info);
user.setUserName("test" + i);
user.setBirthday(new Date());
ls.add(user);// 把对象添加到集合中
}
arg0.setAttribute("testParam", ls);//将集合放入request的上下文中
arg0.getRequestDispatcher("test-view.jsp").forward(arg0, arg1);
}

}

将该servlet配置到web.xml 中,配置代码如下:

<servlet>
<servlet-name>testServlet</servlet-name>
<servlet-class>test.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/test.servlet</url-pattern>
</servlet-mapping>
</servlet>

test-view.jsp代码如下:

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://www.bstek.com/dorado" prefix="d" %>
<html>
<head>
<title></title>
</head>
<body>
<d:View config="test.TestView">
<d:DataTable id="table1" />
</d:View>
</body>
</html>

启动工程访问刚才配置的servlet,可以看到如下页面:

图表 54
从显示的效果当中可以看到放到HttpServletRequest的Attribute里的数据被Dorado引擎取出来并填充到了DODataset里了。
supportsPaging属性指定了DODataset是否会自动根据pageSize和pageIndex属性的值确定数据的分页方式,默认值为false。由此我们可以看出DODataset支持在内存中实现分页的功能。打开这个属性,我们可以把数据全部塞给DODataset,设置好它的pageSize属性就可以让DODataset自己实现分页了(由于是在内存中实现分页功能,所以最好是数据量比较小的情况下比如几十条,如果数据量比较大建议不要采用这个方式)。
打开上面的例子,我们给datasetTest的pageSize属性设置为3,supportsPaging属性设置为true,清空其contextAttribute属性值,并为该dataset添加一个listener,afterLoadData方法的代码如下:

public void afterLoadData(Dataset dataset) throws Exception {
List ls = new ArrayList();
for (int i = 0; i < 10; i++) {
UserInfo user = new UserInfo();
user.setId(info);
user.setUserName("test" + i);
user.setBirthday(new Date());
ls.add(user);
}
dataset.fromDO(ls);//将记录集塞到dataset里
}

同时在Controls节点添加一个PagePilot并将其绑定到datasetTest上,然后将其放到JSP中,如下图:

图表 55
启动工程直接浏览test-view.jsp效果,同时我们可以看到十条记录已经被DODataset自动分页显示。如下图:

图表 56
DODataset的主要属性

属性名

说明

contextAttribute

设置与DODataset进行数据交换的上下文属性名。当我们设定了此属性之后DODataset会在执行装载数据时自动到上下文对象的该属性中寻找DO类型的数据, 如果找到了相应的数据将自动尝试将其装载到DODataset中; 在执行数据更新时DODataset会自动尝试将数据更新到上下文中存贮的数据对象上。

supportsPaging

是否支持内存分页