JSF2.0:encodeAll何时调用,encodeBegin何时调用?
考虑自定义UIComponent(仅用于测试目的): 当我将其添加到复合组件内的页面时,会调用JSF2.0:encodeAll何时调用,encodeBegin何时调用?,jsf,jsf-2,Jsf,Jsf 2,考虑自定义UIComponent(仅用于测试目的): 当我将其添加到复合组件内的页面时,会调用encodeBegin()方法。但是,当将其添加到复合组件外部的页面时,会调用encodeAll()方法 将它添加到其他UIComponents中并没有什么区别,只有复合组件包装器似乎改变了行为 找不到信息为什么会这样?规范链接?在本例中,规范非常混乱,说明: “这些方法是在请求处理生命周期的呈现响应阶段调用的。encodeAll()将 使此组件及其从isRendered()返回true的所有子级和面都
encodeBegin()
方法。但是,当将其添加到复合组件外部的页面时,会调用encodeAll()
方法
将它添加到其他UIComponents中并没有什么区别,只有复合组件包装器似乎改变了行为
找不到信息为什么会这样?规范链接?在本例中,规范非常混乱,说明: “这些方法是在请求处理生命周期的呈现响应阶段调用的。encodeAll()将 使此组件及其从isRendered()返回true的所有子级和面都被渲染,无论 getRendersChildren()返回值的值。encodeBegin()、encodeChildren()和 encodeEnd()负责创建此组件开头的响应数据,即 组件的子级(仅当此组件的rendersChildren属性为true时调用),以及 这一部分分别是。” 然而,这似乎是新旧功能的混合,其中新功能(encodeAll)在某些方面似乎不完整: 我尝试了以下方法: A) 直接在页面中调用组件(无包装器)
似乎也没有其他人知道这一点。这与我的发现基本一致。由于行为有点复杂,如果不是奇怪的话(比较包装器内外的组件),我想我肯定会对此提交一份错误通知单。感谢您花时间检查此问题,欢迎使用SO!)这似乎有一个bug文件。
public class UITest extends UIComponentBase {
@Override
public void encodeBegin(FacesContext context) throws IOException {
System.out.println("encodeBegin");
}
@Override
public void encodeAll(FacesContext context) throws IOException {
System.out.println("encodeAll");
}
}