В настоящее время я занимаюсь разработкой веб-приложения с использованием инфраструктуры Struts2. Это приложение требует динамического обновления объектов на экране на основе данных, полученных из другого приложения.
В данный момент я хотел бы реализовать динамическое древовидное представление, узлы которого периодически обновляются данными, предоставленными классом Action. Я пытаюсь сделать это с помощью объекта dojo.dijit.tree из набора инструментов dojo. Мне известно, что я могу сделать это с помощью тегов dojo, которые являются частью структуры Struts, однако в ней отсутствует большая часть необходимой мне функциональности (постоянство, динамическое открытие и закрытие веток и т. Д.), Поэтому я выбрал использование вместо этого инструментарий Dojo.
Моя проблема с dojo.dijit.tree заключается в том, что я не знаю, как предоставить его данные, используя тип результата JSON. Я уже создал класс, который возвращает тип результата JSON с той же структурой, которая требуется компоненту дерева dojo. Я проверил генерацию дерева додзё с использованием файла «test.txt», который был сгенерирован классом, и он работает, как и ожидалось. Однако я хотел бы передать данные JSON непосредственно в компонент dojo.dijit.tree без сохранения файла на диске. Когда я выполняю приложение, я получаю окно «сохранить как», чтобы сохранить возвращенный результат JSON.
Это мой файл struts.xml:
<struts>
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="devResult" class="gui.JsonAction">
<result name="success">/start1.jsp</result>
</action>
</package>
<package name="example" namespace="/" extends="json-default">
<result-types>
<result-type name="json" class="org.apache.struts2.json.JSONResult"></result-type>
</result-types>
<action name="getJSONResult" class="gui.JsonAction">
<result type="json"/>
</action>
</package>
Это файл JSP, который отображает дерево:
<head>
<title>Testing Tree</title>
<style type="text/css">
@import "js/dojo/dojo/resources/dojo.css";
@import "js/dojo/dijit/themes/nihilo/nihilo.css";
</style>
<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dojo/dojo.xd.js"
djConfig="isDebug: true,parseOnLoad: true">
</script>
<script type="text/javascript">
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dijit.Tree");
dojo.require("dojo.parser");
</script>
<body class="nihilo">
The Tree:<br><br>
<s:url id="devResult" action="jsonAction.action"></s:url>
<div dojoType="dojo.data.ItemFileReadStore" href="%{devResult}" jsid="popStore" />
<div dojoType="dijit.Tree" store="popStore" labelAttr="sname" label="Tree" />
</body>
Это класс Action, который выдает результат JSON:
public class JsonAction extends ActionSupport {
private static final long serialVersionUID = 7392602552908646926L;
private String label = "name";
private String identifier = "name";
private List<ChildrenClass> items = new ArrayList<ChildrenClass>();
public JsonAction() {
ChildrenClass item1 = new ChildrenClass("name1", "cat");
ChildrenClass item2 = new ChildrenClass("name2", "cat");
ChildrenClass item3 = new ChildrenClass("name3", "cat");
ChildrenClass item4 = new ChildrenClass("name4", "cat");
items.add(item1);
items.add(item2);
items.add(item3);
items.add(item4);
}
public String execute() {
return SUCCESS;
}
public void setLabel(String label) {
this.label = label;
}
public String getLabel() {
return label;
}
public void setIdentifier(String identifier) {
this.identifier = identifier;
}
public String getIdentifier() {
return identifier;
}
public void setItems(List<ChildrenClass> lists) {
this.items = lists;
}
public List<ChildrenClass> getItems() {
return items;
}
} * * тысяча двадцать-один
Это дочерний класс, который используется в вышеприведенном классе:
public class ChildrenClass {
private String name;
private String type;
private ChildrenClass[] children;
public ChildrenClass() {
name = "DefaultName";
type = "DefaultType";
}
public ChildrenClass(String aName, String aType) {
name = aName;
type = aType;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setType(String type) {
this.type = type;
}
public String getType() {
return type;
}
public void setChildren(ChildrenClass[] children) {
this.children = children;
}
public ChildrenClass[] getChildren() {
return children;
}
}
Я бы хотел попросить читателя stackoverflow указать, как мне выполнить чтение JSON-данных в файле jsp, чтобы заполнить дерево dojo. Кроме того, я хотел бы спросить, как я могу периодически обновлять его содержимое.
PS: Если у кого-то есть лучший способ реализовать нечто подобное, я был бы рад получить ваши комментарии.
Заранее спасибо.