Я пытаюсь создать веб-приложение, используя Wicket и OrientDB. Я пытаюсь избежать написания/поддержки плоского класса Java, который представляет каждый класс вершин как POJO (например, ORM). Скорее, я отправляю сами вершины на весь веб-слой. Я получаю доступ к свойствам через:
vertex.getProperty("propertyName");
Это означает, что сами свойства не являются переменными-членами Vertex и, следовательно, не могут быть доступны через обычные геттеры/сеттеры. У меня возникла проблема с Wicket, потому что многие компоненты зависят от реализации стиля «PropertyModel», когда вы передаете модель, которая представляет одну из переменных-членов класса, с которым вы работаете, и данные хранятся в этой переменной-члене .
У меня есть этот DataView, который извлекает свойства вершины в метку и текстовое поле.
public VertexViewer(final PageParameters pageParameters, OrientVertex vertex)
this.vertex = vertex;
this.properties = this.vertex.getProperties();
List<String> keyList = new ArrayList<>();
keyList.addAll(this.vertex.getPropertyKeys());
final DataView<String> propertiesView = new DataView<String>("properties", new ListDataProvider<>(keyList)) {
@Override
protected void populateItem(Item item) {
String key = item.getModelObject().toString();
item.add(new Label("property_name", key));
item.add(new TextField<String>("edit_field", new Model<String>(properties.get(key).toString())));
}
};
add(propertiesViewer);
}
И HTML:
<wicket:extend>
<div wicket:id="properties" style="display: table-row;">
<div wicket:id="property_name" style="display: table-cell;"></div>
<input wicket:id="edit_field" type="text" style="display: table-cell;"/>
</div>
</wicket:extend>
Это делает именно то, что я хочу, но есть ли у кого-нибудь рекомендации о том, как я могу сохранить данные, которые изменяются в TextFields? Я не могу использовать модель переменной-члена, как обычно делаю в форме, потому что я никогда точно не знаю, какие/сколько свойств будет в вершине. Я иду об этом совершенно неправильно? Любая помощь очень ценится.