Я пытаюсь реализовать «общий» вид, в котором (часть) отображаемого контента зависит от URL-адреса. Например.
Если /somepath/somepage.xhtml
указывает на несуществующий файл, вместо того, чтобы сразу перейти к ошибке 404, я хочу попытаться получить содержимое /somepath/somepage.xhtml
из базы данных, используя общее представление, /genericview.xhtml
, где у меня есть что-то вроде:
<h:outputText value="#{genericViewBean.content_lg}"
escape="false" />
который, если он будет найден вспомогательным компонентом, выведет содержимое записи базы данных из таблицы tgenericcontent
в зависимости от первоначально запрошенного viewId:
webpath | content
/somepath/somepage.xhtml | <p>This is a test</p>
/someotherpath/someotherpage.xhtml | <p>A different test</p>
Если содержимое представления не найдено в этой таблице, будет возвращена стандартная ошибка 404.
Ближе всего мне удалось клонировать /genericview.xhtml
, изменив только путь к файлу (например, на /somepath/somepage.xhtml
). Но это дает мне одну точную копию файла для каждого представления, это довольно беспорядочно и не позволяет мне создать новый URL-адрес, просто добавив запись в мою базу данных.
Как я могу получить тот же результат без клонирования /genericview.xhtml
?
(P.S. Я читал о милолицых, но нет ли более простого решения?)
FacesServlet
уже делает? Prettyfaces или написание собственного фронт-контроллера (который должен соответствовать либо существующей странице, либо сервлету) — практически единственные ваши варианты. В вашем собственном фронт-контроллере теперь у вас есть гибкость для отправки запроса в соответствующее представление с использованием различных механизмов. - person kolossus   schedule 13.01.2015