2012-03-08 1 views
3

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

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

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

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

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

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

<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 ... 

Googling вокруг воспитан это возможное решение: workaround for webflows in jars

Но это обходное решение не работает, так как оно имеет проблемы с моими многочисленными реестрами потоков.

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

Любые идеи? Большое спасибо за ваши усилия и намеки.

ответ

2

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

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

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