如何在构建时构建Facelets站点?

时间:2011-07-08 13:39:27

标签: facelets java-server

我想使用Facelets构建静态HTML原型。此原型将发送给没有正在运行的Web应用程序服务器(如Tomcat)的人员。有没有办法在构建时将Facelets站点(使用Ant等)编译成一组平面HTML文件?

在最简单的情况下,我们有两个这样的facelets:

<!-- 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(例如“implementationFacelet.output.html”),如:

HELLO WORLD

换句话说,Facelets在构建时而不是渲染时运行,以生成静态平面文件原型。

1 个答案:

答案 0 :(得分:0)

我不确定您的问题是否已准备就绪。但是我有一个相当好的想法是如何实现它,这要归功于构建时JSF EL验证器,我目前正在添加对facelets的支持。我这样做:

  1. 设置EL表达式中使用的支持bean等 - 有多种方法可以做到这一点,我个人考虑插入我的“value faking EL resolver”,但你也可以确保JSF可以找到您的支持bean和一些确保所需的所有值都已设置
  2. 手动编译视图并构建其组件树(已实施 - 请参阅ExperimentalFaceletsElFinder.verifyExpressionsViaComponentTree
  3. 通过UIViewRoot.encodeAll(context)将组件树渲染为HTML - 请参阅org.apache.myfaces.view.facelets.FaceletViewHandler#renderView
  4. 所以这是可行的,但对于那些以前从未使用过这些东西的人来说可能工作太多了。一旦我完成了Facelets支持,我会考虑将这些功能添加到验证器中,因为这对我来说很容易。

    最好的问候,Jakub