Как реализовать сложный поток страниц в веб-приложении Java
Я пытаюсь реализовать достаточно сложный поток страниц (более 100 страниц) как традиционное веб-приложение. Я нашел несколько вариантов, но ни один из них не на 100% убедителен
- Ручной код потока в контроллеры, перенаправления и т. Д. Это, очевидно, не самая лучшая вещь для обслуживания
- JSF не только обрабатывает поток, но также требует использования JSF в качестве технологии просмотра. Мне не нравится эта блокировка
- Весенняя паутина. Текущая версия 2.3.1 определяет потоки в XML, которые нелегко поддерживать. Предстоящий выпуск 3.0 обещает определить потоки с аннотациями на чистом Java, но у него даже нет временной шкалы. Кроме того, в последние годы развитие проекта значительно замедлилось.
- Концепция GWT и Vaadin ближе к традиционному настольному приложению, чем к веб-приложению, которое действительно удобно использовать, но оно не подходит для моего проекта.
Кроме того, я нашел десятки заброшенных проектов, подобных этому: http://javasteps.sourceforge.net/
Мне интересно, почему все эти проекты заброшены, как реализовать сложный поток страниц в 2012 году?
3 ответа
Лично я бы порекомендовал одностраничную архитектуру:
Архитектура одностраничного веб-приложения JavaScript?
Я не уверен, возможно ли это с вашей заявкой. Я использовал все упомянутые выше потоки и сейчас работаю над одностраничным приложением, и мне это нравится. Мы используем Dojo на стороне клиента, который вызывает REST API на сервере. Это было довольно мило.
Vaadin тоже довольно солидный и его гораздо проще настроить, чем просто GWT. Если в вашем проекте много ребят из пользовательского интерфейса, которым нравится кодировать в CSS и Javascript, они будут ненавидеть такой подход.
Spring Webflow довольно солидный на самом деле. Я не смотрел на это некоторое время, но когда я использовал его, он выполнил работу для того, над чем я работал в то время.
Это действительно поздно, но я не вижу удовлетворительного ответа на этот вопрос и хотел бы поделиться подходом, который я попробовал в недавнем проекте, который, я считаю, лучше, чем подход с использованием весеннего веб-потока, который строго привязан к весенним представлениям. Я создал SPA с использованием угловых JS с Spring MVC. В угловых JS я не использовал маршрутизаторы или состояние, скорее я создал div в контроллере, как показано ниже
<div width="100%" id="fullertonDataPanel" ng-include="page"></div>
На стороне сервера, чтобы захватить все возможные переходы от одного кадра (я имею в виду определенный экран в SPA) к другому, я создал дерево правил, используя MVEL . Таким образом, в базе данных у меня была структура, которая хранила дерево правил для каждого кадра. Данные в выражениях MVEL устанавливались различными службами, которые вызывало каждое действие. Таким образом, при любом действии были выполнены следующие шаги.
1) Подтвердите действие.
2) вызывать различные услуги.
3) Захват данных из этих сервисов и объединение их с существующими данными пользователя.
4) Подайте эти захваченные данные в набор правил для каждого кадра вместе с деталями текущего кадра.
5) Запустите правила дерева по отношению к текущему кадру и получите его вывод.
6) Если есть только один переход, то это последний переход. Если есть 2 перехода и один по умолчанию, тогда игнорируйте переход по умолчанию и используйте другой переход.
7) Верните имя шаблона перехода к угловому контроллеру и установите значение переменной страницы в области видимости контроллера.
Используя этот подход, все мои службы должны были хранить данные в разных полях данных с определенным действием. Все сложные условия if-else для веб-потоков или каких-либо сложных определений процессов (например, определенных в Spring-Web Flow) не требовались. Механизм правил MVEL управлял всем этим, и, поскольку он был в базе данных, его можно было изменить без необходимости перезапуска сервера.
Я полагаю, что этот общий подход с MVEL является гибким подходом, который всесторонне решает проблему запутанного потока, не внося беспорядок в код приложения или добавляя дополнительные ненужные файлы XML.
Существует новая платформа MVC и реализация веб-потока для модели компонентов Vaadin, которая называется Lexaden Web Flow.
Вы можете попробовать его для своего приложения в качестве возможной альтернативы.