由于所有JSP在执行之前都会生成/转换为Servlet,对于Facelets也是如此吗?
我正在使用JSF 2.0和Facelets,并希望看到它生成的Java代码可能是Servlet。
答案 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代码。