0

我想使用 Facelets 构建静态 HTML 原型。该原型将发送给没有运行 Web 应用程序服务器(例如 Tomcat)的人。有没有办法在构建时(使用 Ant 等)将 Facelets 站点编译成一组平面 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 在构建时而不是渲染时运行,以便生成静态平面文件原型。

4

1 回答 1

0

我不确定是否有任何现成的解决方案可以解决您的问题。但是,由于在构建时 JSF EL 验证器上工作,我对如何实现它有一个相当好的想法,我目前正在其中添加对 facelets 的支持。我会这样做:

  1. 设置 EL 表达式中使用的支持 bean 等 - 有多种方法可以做到这一点,我个人会考虑插入我的“值伪造 EL 解析器”,但您也可以同样确保 JSF 可以找到您的支持 bean 和以某种方式确保设置了所有需要的值
  2. 手动编译视图并构建其组件树(已实现 - 请参阅ExperimentalFaceletsElFinder.verifyExpressionsViaComponentTree
  3. 通过 UIViewRoot.encodeAll(context) 将组件树渲染为 HTML - 请参阅 org.apache.myfaces.view.facelets.FaceletViewHandler#renderView

所以这是可行的,但对于以前没有使用过这些东西的人来说可能工作量太大了。一旦我完成了对 Facelets 的支持,我会考虑将这样的功能添加到验证器中,因为这对我来说很容易。

最好的问候, 雅库布

于 2011-10-28T11:22:16.507 回答