由于所有 JSP 在执行之前都生成/转换为 Servlet,Facelets 也是如此吗?
我正在使用 JSF 2.0 和 Facelets,并希望看到它生成的 Java 代码可能是 Servlet。
由于所有 JSP 在执行之前都生成/转换为 Servlet,Facelets 也是如此吗?
我正在使用 JSF 2.0 和 Facelets,并希望看到它生成的 Java 代码可能是 Servlet。
不,Facelets 文件使用SAX 解析器解析为 XML 树。XML 树存储在Facelet 缓存中。XML 树在视图构建期间变成了UIComponent
可访问的树FacesContext#getViewRoot()
(您可以getChildren()
在运行时遍历)。组件树通常通过它们自己的encodeXxx()
方法或相关联的方法生成 HTML 代码Renderer
,以UIViewRoot#encodeAll()
.
Facelets 文件不生成任何类文件。XML 树默认存储在服务器的内存中。但是,从 JSF 2.1 开始,您可以指定自定义FaceletCache
实现,您可以<facelet-cache-factory>
在faces-config.xml
其中编写代码以将 XML 树存储在例如磁盘文件系统上(不过这会更慢)。
如果<ui:debug>
在视图中使用并打开它,则可以看到后面的组件树的文本表示UIViewRoot
。另请参阅如何调试 JSF/EL
不完全相同的方式,它被缓存。但它不会生成 servlet 代码。