Facelets页面是作为JSP生成的Servlet生成的Servlet

时间:2012-11-01 08:43:53

标签: jsf compilation facelets

由于所有JSP在执行之前都会生成/转换为Servlet,对于Facelets也是如此吗?

我正在使用JSF 2.0和Facelets,并希望看到它生成的Java代码可能是Servlet。

2 个答案:

答案 0 :(得分:13)

不,使用SAX parser将Facelets文件解析为XML树。 XML树存储在Facelet cache中。 XML树在view build time期间变为UIComponent树,可由FacesContext#getViewRoot()访问(您可以在运行时通过getChildren()遍历)。组件树通常按照自己的encodeXxx()方法或关联的Renderer上的方法生成HTML代码,从UIViewRoot#encodeAll()开始。

Facelets文件生成任何类文件。默认情况下,XML树存储在服务器的内存中。但是,从JSF 2.1开始,您可以在<facelet-cache-factory>中通过faces-config.xml指定自定义FaceletCache实现,其中您可以编写代码来存储XML树,例如磁盘文件系统(这将更慢,虽然)。

如果您在视图中使用<ui:debug>并将其打开,那么您可以在UIViewRoot后面看到组件树的文本表示。另请参阅how to debug JSF/EL

另见:

答案 1 :(得分:1)

不完全相同的方式,它被缓存。但它不会生成servlet代码。