SmartGWT:TreeGrid展开空文件夹重置树

时间:2012-05-17 15:18:11

标签: xml datasource smartgwt treegrid

我正在使用XML类型DataSource中的数据构建TreeGrid,就像在SmartClient展示中一样。

我使用的是Windows XP和SmartGWT 3.0版,GWT SDK 2.4.0(使用Eclipse IDE)。

然而,问题是当我尝试展开空文件夹时,树自行关闭/重置重置所有选择(因为我正在使用一个复选框树选择类型),我也得到了这个错误(警告):

[ERROR] [testtree] - 15:19:26.637:XRP0:WARN:ResultTree:isc_ResultTree_0 (created by: isc_TreeGrid_0):Adding node to tree with id property set to:1. A node with this ID is already present in this Tree - that node will be replaced. Note that this warning may be disabled by setting the reportCollisions attribute to false.

这实际上非常相似(http://forums.smartclient.com/showthread.php?t=20167),但他没有解释解决方案。 :(

这是我用于XML数据源的测试值:

...
<record>
<id>1</id>
<parentId>0</parentId>
<name>test1</name>
</record>

<record>
<id>2</id>
<parentId>1</parentId>
<name>test41</name>
</record>

<record>
<id>3</id>
<parentId>2</parentId>
<name>test2</name>
</record>

<record>
    <id>4</id>
    <parentId>3</parentId>
    <name>test212</name>
</record>

这是问题的截图; (抱歉没有足够的代表不能发布图片) 之前我点击了展开按钮:link (imgur image) 并且,之后link

根据上图,如果我尝试展开'test212''test2',则会出现此问题。

这是我的TreeGrid属性的片段:

...
TreeGrid test = new TreeGrid();
test.setAutoFetchData(true);
test.setDataSource(SingletonDS.getInstance());
test.setSelectionAppearance(SelectionAppearance.CHECKBOX);
test.setShowPartialSelection(true);
test.setShowSelectedStyle(false);

layout.addMember(test);

这是我的单件DataSource的属性:

...    
singleton.setDataFormat(DSDataFormat.XML);

singleton.setID("singletonDS");

DataSourceIntegerField idField = new DataSourceIntegerField("id", "ID");
idField.setPrimaryKey(true);
DataSourceIntegerField parentIdField = new DataSourceIntegerField("parentId", "Parent ID");
parentIdField.setForeignKey(singleton.getID()+".id");
parentId.setRootValue(0);
DataSourceTextField nameField = new DataSourceTextField("name", "Name");

singleton.setFields(idField, parentIdField, nameField);
...

注意:XML数据已正确传递到网格中。

感谢您的帮助! :)

1 个答案:

答案 0 :(得分:1)

我想我终于找到了解决方案。这不是错误,这是我自己的笨拙错误。

在广泛调试项目之后,我注意到GET参数中有一个idParent参数,我没有处理它。因此,servlet始终输出完整的XML数据,从而产生此错误。