SmartGWT学习整理 2、理解核心中的核心DataSource
DataSource之所以重要,是因为它负责所有的与服务器的数据交互,几乎所有的控件都离不开它。 可以这样说,理解了DataSource就掌握了SmartGWT的70% DataSource支持的数据格式有xml、json、webservise等。他可以将数据按照指定的格式解析为可供控件使用的数据(Record对象),每一条数据就想数据库中的一行记录一样。 举个记录列表的例子来说,http://www.smartclient.com/smartgwt/showcase/#grid_databinding_xml_datasource showcase中的这个例子就是将xml文件作为数据源,格式为 <List> <country> <continent>North America</continent> <countryName>United States</countryName> <countryCode>US</countryCode> <area>9631420</area> <population>298444215</population> <gdp>12360000</gdp> <independence>1776-07-04</independence> <government>federal republic</government> <government_desc>2</government_desc> <capital>Washington, DC</capital> <member_g8>true</member_g8> <article>http://en.wikipedia.org/wiki/United_states</article> </country> ... ... ... </List> 每条country记录包括了continent、countryName等字段,那么对应的DataSource就是 private static class CountryDS extends DataSource {
// The DataSource would normally be defined external to any classes that use it.
private static CountryDS instance = null;
public static CountryDS getInstance() {
if (instance == null) {
instance = new CountryDS("countryDS_XML");
}
return instance;
}
public CountryDS(String id) {
setID(id);
setDataFormat(DSDataFormat.XML);
setRecordXPath("/List/country");
DataSourceField countryCodeField = new DataSourceField("countryCode", FieldType.TEXT,
"Code");
DataSourceField countryNameField = new DataSourceField("countryName", FieldType.TEXT,
"Country");
DataSourceField capitalField = new DataSourceField("capital", FieldType.TEXT,
"Capital");
setFields(countryCodeField, countryNameField, capitalField);
setDataURL("ds/test_data/country.data.xml");
}
} showcase里的这个例子是通过继承DataSource来创建实例,一般也可以直接new DataSource()来创建。 这里用到了DataSource中的几个重要方法, setDataFormat(DSDataFormat.XML);//这个方法声明了要调用的数据源是xml格式的 setRecordXPath("/List/country"); //声明了解析xml的数据路径,这里就是指在<List>标签下的<country>标签就是需要的数据 然后定义了3个字段DataSourceField setFields方法设定DataSource中所有的字段。 setDataURL("ds/test_data/country.data.xml"); 这个方法指定了数据源的url地址,DataSource将从这个地址获取数据 数据字段DataSourceField的构造函数DataSourceField(String name, FieldType type, String title)
name是数据内部使用的名字,FieldType是指定数据的类型,title是供控件显示给用户的名字 一般不直接使用DataSourceField,而是使用它的子类,都在com.smartgwt.client.data.fields包下, 例如字符型字段就用DataSourceTextField,布尔型用DataSourceBooleanField等等。 接下来定义一个列表控件(ListGrid)用来展示数据 final ListGrid countryGrid = new ListGrid();
countryGrid.setWidth(400);
countryGrid.setHeight(224);
countryGrid.setShowAllRecords(true);
countryGrid.setDataSource(CountryDS.getInstance());//将定义好的DataSource传递给列表控件 countryGrid.setAutoFetchData(true); //设定控件在显示的时候自动通过DataSource获取数据,如果设为false的话,那么需要手动通过countryGrid.fetch();方法来获取数据 countryGrid.draw(); 这样一个显示国家数据的列表页面就完成了。 接下来再看一个json数据格式的例子 http://www.smartclient.com/smartgwt/showcase/#grid_databinding_json_datasource 里边的差别就是建立DataSource的时候通过setDataFormat(DSDataFormat.JSON);
将数据源的格式指定为json格式,没有指定setRecordXPath是因为这个json数据里根节点的数据就是需要的数据。 可以看到用SmartGWT可以很方便的来展示数据,在MVC框架中可以用SmartGWT来画前台界面,后台只需要生成指定格式(xml或json,个人比较偏向使用json)的数据就可以了。 建了个smartGWT的qq群,有兴趣的可以进来一起学习讨论 117824970
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您好,如果用json格式,是否需要在后台生成json文件,然后用 setDataURL指定json文件的地址?还是有其它方法呢 ######怎么实现Service dao方式返回 List<Emp>,然后设置到DataSource中呢,前提是不想使用servlet生成服务端xml,然后再使用DataSoutce.setDataUrl(emp.xml)这种方式,不使用这种,怎么能直接调用呢?另外关于DSRequest和DSResponse的含义还是不太懂!