как создать сайт Facelets во время сборки? - PullRequest
0 голосов
/ 08 июля 2011

Я хочу использовать Facelets для создания статического прототипа HTML. Этот прототип будет разослан людям, у которых нет запущенного сервера веб-приложений, например Tomcat. Есть ли какой-нибудь способ скомпилировать сайт Facelets во время сборки (используя Ant и т. Д.) В набор плоских HTML-файлов?

В простейшем случае у нас есть две грани вроде этого:

<!-- layoutFacelet.xhtml -->
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://java.sun.com/jsf/facelets">
    <ui:insert name="content" />
</ui:composition>

<!-- implementationFacelet.xhtml -->
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  template="layoutFacelet.xhtml">
    <ui:define name="content">
        HELLO WORLD
    </ui:define>
</ui:composition>

Выводом будет один html (например, "creationFacelet.output.html"), такой как:

HELLO WORLD

Другими словами, Facelets работает во время сборки, а не во время рендеринга, для создания статических прототипов плоских файлов.

1 Ответ

0 голосов
/ 28 октября 2011

Я не уверен ни в каком готовом решении проблемы. Однако я довольно неплохо представляю, как это можно реализовать благодаря работе над валидатором JSF EL во время сборки, где я в настоящее время добавляю поддержку фейслетов. Я бы сделал это:

  1. Настройка вспомогательных компонентов и т. Д., Используемых в выражениях EL - есть несколько способов сделать это, я лично подумал бы о подключении моего « подставного значения распознавателя EL », но вы также можете просто сделать убедитесь, что JSF может найти ваши компоненты поддержки и каким-то образом убедиться, что все необходимые значения установлены
  2. Скомпилируйте представление вручную и создайте его дерево компонентов (реализовано - см. ExperimentalFaceletsElFinder.verifyExpressionsViaComponentTree )
  3. Визуализация дерева компонентов в HTML с помощью UIViewRoot.encodeAll (context) - см. Org.apache.myfaces.view.facelets.FaceletViewHandler # renderView

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

С уважением, Якуб

...