Допустим, у нас есть сущность домена, определенная следующим образом:
interface MyNode {
MyNode getParent();
void setParent(MyNode node);
List<MyNode> GetChildren();
void AddChild(MyNode node);
void RemoveChild(MyNode node);
String getText();
void setText(String text);
}
Я пытаюсь реализовать веб-приложение GWT для работы с этими объектами. Я использую фабрику запросов и редакторы фреймворков. И у меня наверняка есть некоторые проблемы: -)
Поскольку определения фабрики запросов тривиальны, я не буду размещать их здесь. Я бы сказал, что все, что связано с детьми, - это набор InstanceRequest
с.
Итак, проблема № 1
Допустим, мы хотим иметь навигатор для всего дерева. Идея в том, что каждый раз, когда мы видим только один узел, мы можем либо перейти к его родителю, либо к одному из его дочерних узлов. Мы хотели бы, чтобы этот навигатор использовал каркас редакторов, поэтому мы создаем редакторы, такие как MyNodeEditor
и ChildrenListEditor
.
Насколько я знаю, редакторы имеют прямое отношение только к объектам в стиле бобов. Таким образом, если работа со свойством MyNode
text
в порядке, работа со свойством children
(ChildrenListEditor
) требует запроса экземпляра.
Мое решение состоит в том, чтобы сделать MyNodeEditor
равным ValueAwareEditor
, и когда он получит свое значение, он инициирует InstanceRequest
, чтобы получить список дочерних узлов. Этот список затем связан с ChildrenListEditor
.
Есть ли более простые решения? Я считаю, что это довольно простой сценарий.
Задача № 2
Теперь мы решили сделать наш MyNodeEditor
способным к редактированию. Свойства в стиле бобов снова хороши, но как насчет детей? Используя код, указанный в задаче № 1:
@Override public void setValue(MyNodeProxy value) {
...
requestFactory.myNodeRequest().getChildNodes().using(value).fire(new Receiver<List<MyNodeProxy>>() {
@Override public void onSuccess(List<MyNodeProxy> response) {
childrenDriver.display(response);
}
});
...
}
вызывает «Причина: java.lang.IllegalArgumentException: Попытка отредактировать EntityProxy, ранее отредактированный другим RequestContext», потому что у меня есть 2 различных запроса для той же самой сущности здесь. У меня нет доступа к RequestContext
, который я создал в MyNodeEditor
, поэтому я создаю новый, и он не работает. Какой правильный подход?