Наиболее простой способ -
. Включенный контент должен быть помещен внутри
.
Пример Kickoff главной страницы /page.xhtml
:
Include demo
Master page
Master page blah blah lorem ipsum
Страница включения /WEB-INF/include.xhtml
(да, это файл целиком, любые теги вне
не нужны, поскольку в любом случае они игнорируются Facelets):
Include page
Include page blah blah lorem ipsum
Это нужно открыть /page.xhtml
. Обратите внимание, что вам не нужно повторять ,
и
внутри включенного файла, что в противном случае приводило бы к недопустимому HTML .
Вы можете используйте динамическое выражение EL в
. См. Также . Как обновить динамику ajax, включив контент в меню навигации? (JSF SPA) .
/
Более сложным способом включения является templating . Это включает в себя в основном наоборот. Страница главного шаблона должна использовать
, чтобы объявить места для вставки определенного содержимого шаблона. Страница шаблона клиента, использующая страницу главного шаблона, должна использовать
для определения содержимого шаблона, который должен быть вставлен.
Страница главного шаблона /WEB-INF/template.xhtml
(как подсказка дизайна: заголовок, меню и нижний колонтитул могут, в свою очередь, быть
файлами):
Default title
Header
Default content
Страница клиента шаблона /page.xhtml
(обратите внимание на атрибут template
, также здесь это файл целиком):
New page title here
New content here
Blah blah
Это нужно открыть /page.xhtml
. Если нет
, тогда вместо него будет отображаться содержимое по умолчанию внутри
, если оно есть.
Вы можете передать параметры на
или
на
.
...
Внутри файла include / template он будет доступен как #{foo}
. Если вам нужно передать «много» параметров в
, вам лучше рассмотреть регистрацию файла include как файла тега, чтобы вы могли в конечном итоге использовать его так
. См. Также . Когда использовать & lt; ui: include & gt ;, файлы тегов, составные компоненты и / или настраиваемые компоненты?
Вы можете даже передать целые бобы, методы и параметры с помощью
. См. Также JSF 2: как передать действие, включающее аргумент, вызываемый в под-просмотр Facelets (с использованием ui: include и ui: param)?
Файлы, которые не должны быть общедоступными, просто вводя / угадывая его URL-адрес, должны быть помещены в папку /WEB-INF
, например, как файл include и файл шаблона в приведенном выше примере. См. Также Какие файлы XHTML мне нужно вставить / WEB-INF, а какие нет?
За пределами
не должно быть никакой разметки (HTML-код) и
. Вы можете поместить их, но они будут проигнорированы Facelets. Внесение разметки в нее полезно только для веб-дизайнеров. См. Также . Есть ли способ запустить страницу JSF без создания всего проекта?
В наши дни доктриком HTML5 является рекомендуемый тип доктрины, «несмотря на то, что это XHTML файл. Вы должны увидеть XHTML как язык, который позволяет вам создавать HTML-выход, используя инструмент на основе XML. См. Также Возможно ли использовать JSF + Facelets с поддержкой HTML 4/5? и JavaServer Faces 2.2 и HTML5, почему XHTML все еще используется .
Файлы CSS / JS / image могут быть включены в качестве динамически перемещаемых / локализованных / версий. См. Также Как ссылаться на ресурс CSS / JS / image в шаблоне Facelets?
Вы можете поместить файлы Facelets в многоразовый JAR-файл. См. Также Структура для нескольких проектов JSF с общим кодом .
Для примеров реального времени расширенного шаблона Facelets проверьте папку src/main/webapp
в исходном коде Java EE Kickoff и исходный код сайта сайта OmniFaces .