如何在独立应用程序中使用Java Facelets作为通用模板引擎?

4
我想使用Facelets生成HTML内容。我希望重用现有的标签库,但Velocity不支持这一点。
我已经阅读了开发者指南,但没有头绪。
Facelets需要Java编译器才能工作吗?(我猜不需要)我也尝试过Jetty ServletTester,但似乎不起作用。
所以这是可能的吗?

Jetty ServletTester 不太适配 jsf-ri,建议改用 myfaces-impl - Lenik
1个回答

1

是的,这是可能的。

渲染视图不需要Java编译器。Facelets完全由标签库驱动,只有表达式语言(EL)可以出现在模板脚本中,因此不需要静态编译任何内容。

要在独立应用程序中嵌入Facelets,可以通过编程方式初始化servlet上下文。在这种情况下,我使用Jetty。请参阅ServletTester类的实现,并编写自己的服务器。

值得一提的是,jsf-ri效果不佳,但幸运的是,我们还有另一种选择,即可以使用myfaces-impl来取得更好的效果。

主要问题仍然是关于ResourceResolver的。如果您需要设置复杂的资源结构,例如将模板文件(xhtml)放置在不同位置,则需要:

  1. 创建自己的ResourceResolver代理DefaultResourceResolver。

  2. 覆盖org.mortbay.jetty.servlet.Context.getResource(),使其返回与ResourceResolver一致的资源。如果嵌入式servlet上下文不基于Jetty,则返回类似的资源。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接