Относительные представления в состояниях представления в потоке, который загружен из jar-файла - PullRequest
3 голосов
/ 08 марта 2012

У меня есть вопрос относительно Spring Web Flow с JSF: как я могу научить Spring Web Flow уметь загружать относительные представления, такие как view = "pages / view.xhtml" из jar-файла в classpathвеб-приложение кота?После некоторого исследования через Google я думаю, что Web Flow не поддерживает это созвездие из коробки.

Может быть, какой-то контекст, чтобы помочь понять мой вопрос: - Потоки зарегистрированы в нескольких FlowRegistries (я решил эту проблему с помощьюреализация пользовательской реализации, которая находит все flowRegistries в контексте Spring) - Потоки могут находиться либо как файловый ресурс за пределами classpath, либо как jar в classpath, т.е. потоки ресурсных файлов расположены где-то в WEB-INF / conf и они находятся в одной и той же позиции в файлах jar.- Представления в определениях потока адресованы относительно файла определения потока

Теперь вы можете задать вопрос, почему у нас есть оба созвездия, в которых могут находиться потоки.В данный момент мы пытаемся извлечь из большого количества модулей веб-приложения, которые содержат все функции, принадлежащие определенному домену.Подход заключается в объединении всех относящихся к нему артефактов в рамках одного проекта, который затем можно создать как jar и затем добавить в веб-приложение.

Хотя загрузка компонентов Spring для каждого jar не составляет проблемы, не зная, где находится наша конфигурацияфайлы расположены, веб-поток вызывает некоторые проблемы.

Первая проблема заключалась в том, что flowRegistry - это монолит, который нельзя разделить, не выполнив что-либо заранее.Эта проблема решается с помощью пользовательского реестра потоков.

Но теперь я подошел ко второй проблеме: в состояниях представления мы ссылаемся на страницы относительно определения потока, как описано в документации :

<view-state id="some-id" view="pages/somepage.xhtml"> ... </view-state>

Теперь, когда я вхожу в такое состояние просмотра, веб-поток выдает исключение, которое говорит мне, что этот способ не поддерживается:

A ContextResource is required to get relative view paths within this context;
the resource was ...

Поиск в Google выдвинул эту возможностьРешение: Обходной путь для веб-потоков в банках

Но этот обходной путь не работает, так как у него есть проблема с несколькими регистрами потоков.

Другой вариант может быть не помещать всев банку, но я не уверен, что это лучшая идея.Скорее всего, есть все, что может быть загружено из classpath в банке, а остальные как чистые файлы в определенной структуре.

Есть идеи?Большое спасибо за ваши усилия и советы.

1 Ответ

2 голосов
/ 16 марта 2012

Я сам нашел несколько иное решение после нескольких часов попыток и отладки приложения для достижения цели вопроса.

  1. Первое, что нужно изменить, - это перейти с Tomcat 6 наTomcat 7 из-за изменения спецификации API сервлета, который позволил мне решить мою проблему с небольшими изменениями
  2. Я переключился с относительной ссылки в состояниях представления на абсолютную адресацию
  3. Я изменил структуру каталоговмоего jar-файла для соответствия новому API сервлета: все файловые ресурсы, необходимые для JSF или Spring Webflow, должны быть помещены в META-INF / resources (см. Javadoc из ServletContext , ищите метод getResource, он указываетчто мне нужно)

Эти три шага позволили мне полностью упаковать веб-потоки и их ресурсы в jar-файлы.

...