Я собираюсь начать работу над проектом с использованием JSF / Facelets, который должен интегрироваться со сторонней библиотекой.
Эта сторонняя библиотека содержит определение экрана и имеет следующий API:
/** This method gets the screen information**/
public Screen getScreen(int screenId);
/** This method gets the first screen id **/
public int getFirstScreenId();
/** This method submits the screen with the user supplied
values and gets the next screen id **/
public int submitScreen(int screenId, Map<String,Sring> keyValuePair)
throws ScreenValidationException;
Объект «Экран» содержит список элементов управления. «Элемент управления» - это интерфейс, имеющий около 25 реализаций.
- а именно LabelControl, TextBoxControl, TextAreaControl, DropDownListControl и т. д ....
Вот пример того, как API будет использоваться для сбора данных от пользователя:
Шаг 1: вызовите getFirstScreenId () ==> Это вернет идентификатор первого экрана для отображения пользователю.
Шаг 2: вызовите getScreen (), используя идентификатор экрана
Шаг 3: Объект Screen, возвращаемый на шаге 2, имеет список элементов управления. Отображение HTML-представления экрана со всеми элементами управления (в виде HTML-формы) для пользователя.
Шаг 4: пользователь отправил HTML-форму. Используйте submitScreen () для отправки значений.
Сторонняя библиотека вернет следующий идентификатор экрана или -1, если больше нет экранов для показа.
Шаг 5: Повторяйте шаги 2-4, пока submitScreen () не вернет -1. Если -1 возвращается, это означает, что
шаг сбора данных завершен, откройте страницу с благодарностью для пользователя.
submitScreen () может вызвать исключение ScreenValidationException - в этом случае повторно отобразить текущий экран с помощью
сообщения проверки, присутствующие в объекте ScreenValidationException.
Итак, мой вопрос: как я могу использовать JSF / Facelets для отображения интерфейса пользователя в этом сценарии?
Я могу представить, что мне нужно следующее
управляемый компонент, у которого есть метод действия, который выполняет взаимодействие со сторонней библиотекой. Хотя я думаю, что сервлет лучше всего подходит для этого?
Шаблоны интерфейса Facelets для 25 нечетных элементов управления (textboxControl, dropdownlistControl и т.д ....)
Код, который проходит по элементам управления в объекте «Экран» и выполняет что-то вроде
// render the "html form start tag" , i.e,
for (Control control : screen.getControls()) {
if (control instanceof LabelControl)
{
// render the LabelControl using the "label template"
}
else if (control instanceof DropDownListControl)
{
// render the DropDownListControl using the "dropdownlist template"
}
....... }
// render the "html form end template" , i.e,
Я не могу представить, как я могу сложить эти три. Кто-нибудь может мне помочь?