Методы настройки макета пользовательского интерфейса - PullRequest
1 голос
/ 23 июля 2011

Проблема, описанная ниже, связана с Java-программой отслеживания запасов. Существует несколько классов предметов инвентаря, и невозможно заранее определить, какие свойства целевого класса отслеживаются. Например, два класса:

InventoryClassOne {
  String name;
  Double price
}
InventoryClassTwo {
  StockStatus status;
  Long Quantity
}.

Хранение данных не проблема, я могу просто определить

class InventoryProperty<T> {
  T value;
} 

и

class InventoryClass {
  Map<String, InventoryProperty<?>> inventoryPropertyMap;
}

Пользовательский интерфейс будет разработан с использованием платформы Wicket. Я хочу предоставить администратору приложения средство добавления новых InventoryClasses и определения способа размещения данных (табличных, списочных и т. Д.) Для каждого InventoryClass. Кто-нибудь когда-нибудь решал подобные проблемы? Какие шаблоны дизайна доступны для достижения этой цели. Я даже не знаю, какие слова напечатать в Google, чтобы узнать, как это решить.

1 Ответ

1 голос
/ 23 июля 2011

Как бы я ни любил Wicket, я действительно не думаю, что это лучший вариант для такого мета-сайта.

Но если бы мне абсолютно необходимо было сделать это в Wicket, я бы сделал следующее:

  1. Создайте Fragment для каждого базового виджета пользовательского интерфейса.
  2. На странице администратора вы создаете сопоставление каждого поля вашего класса инвентаря с заранее созданным фрагментом. (Вам придется использовать отражение, чтобы запросить, какие поля доступны.)
  3. Когда вы создаете свою страницу пользовательского интерфейса, вы создаете повторитель (например, ListView, но подойдет даже простой повторитель), который для каждой записи в вашем отображении поля-> Фрагмент добавляет фрагмент с указанием модели на поле.

Возможно, вам придется немного подправить его, особенно с помощью таблиц, но это основная идея.

Однако, и я должен повторить это, вы практически теряете большинство преимуществ Wicket, даже хуже, вам придется приложить дополнительные усилия, чтобы обойти (или против) Wicket. Кажется, оно того не стоит.

...