Я пришел к выводу, что с SmartGWT это просто невозможно из-за того факта, что в компонентах SmartGWT, которые могут обрабатывать иерархические данные, вам необходимо указывать родительский ключ в качестве атрибута, что не очень практично (IMHO). ..
Теперь решение: лучшая альтернатива этому - использовать основные виджеты GWT Tree и TreeItem , с TreeItem вы можете прикреплять элементы динамически, поэтому я загрузил данные json в JSONObject и рекурсивное добавление узлов.
Ниже процесса загрузки узлов дерева:
private void loadTreeNodes(JSONObject jsonObject, TreeItem parent) {
for (String key: jsonObject.keySet()) {
JSONValue jsonValue = jsonObject.get(key);
TreeItem item = new TreeItem("<b>" + key + "</b> ");
parent.addItem(item);
if (jsonValue != null) {
if (jsonValue.isObject() != null) {
loadTreeNodes(jsonValue.isObject(), item);
} else if (jsonValue.isArray() != null) {
} else {
if ("oldValue".equals(key)) {
item.setHTML("<b>before:</b> " + jsonValue.toString());
} else {
item.setHTML("<b>after:</b> " + jsonValue.toString());
}
}
} else {
item.setText("<b>" + item.getText() + ":</b> null");
}
}
}
Я загрузил данные json следующим образом:
JavaScriptObject obj = JSON.decode(jsonData);
JSONObject jsonObject = new JSONObject(obj);
Любые комментарии приветствуются!