Jsf 即使渲染属性为false,组件仍然会在组件树中结束
莫哈拉2.1 我检查了类Jsf 即使渲染属性为false,组件仍然会在组件树中结束,jsf,jsf-2,rendered-attribute,Jsf,Jsf 2,Rendered Attribute,莫哈拉2.1 我检查了类com.sun.faces.lifecycle.RestoreViewPhase中的方法public void execute(FacesContext FacesContext)抛出FacesException。现在,一旦调用viewRoot=viewHandler.restoreView(facesContext,viewId)恢复了视图我们有来自上一个请求的complete树(如果是回发) 我检查了该树(在调试器中手动迭代组件的子属性),发现组合组件声明如下: &l
com.sun.faces.lifecycle.RestoreViewPhase
中的方法public void execute(FacesContext FacesContext)抛出FacesException
。现在,一旦调用viewRoot=viewHandler.restoreView(facesContext,viewId)恢复了视图代码>我们有来自上一个请求的complete树(如果是回发)
我检查了该树(在调试器中手动迭代组件的子属性
),发现组合组件声明如下:
<h:panelGroup rendered="#{bean.id == 1}">
<utils:dropDownListFilterItem />
</h:panelGroup>
<h:panelGroup rendered="#{bean.id == 2}">
<utils:dateFilterItem />
</h:panelGroup>
<h:panelGroup rendered="#{bean.id == 3}">
<utils:fieldFilterItem />
</h:panelGroup>
我们都在那棵树上。尽管{bean.id}
被计算为2,它还是发生了。我解释说树中只有
实例
因此,我的问题是Mojarra如何处理呈现的属性?属性是否影响唯一的渲染响应阶段?在RestoreView
-阶段中不使用渲染属性。第一次对其求值是在ApplyRequestValue
阶段。这是因为在RestoreView
阶段没有应用任何请求值。因此,无法计算可能依赖于这些值的呈现的-属性
我们都在那棵树上。尽管#{bean.id}被计算为2,它还是发生了。我解释说唯一的实例将在树中
JSF的组件树知道所有组件,不管它们是否被渲染。如果组件树中缺少内部组件(尚未渲染的组件),则可以使用render=“outerComponent”将某个组件与其所有内部组件(通常与复选框等一起使用)重新渲染如果内部组件的rendered
-属性现在计算为true,则将无法显示内部组件
为了避免组件被添加到该树中,您必须使用JSTL-标记,例如
-如果计算结果为false,则该组件根本不会被添加到组件树中,因此JSF将在不知道某个组件的情况下开始处理该树
您可能还想阅读这篇文章,其中用示例和更多细节解释了差异:
在RestoreView
阶段,不使用渲染属性。第一次对其求值是在ApplyRequestValue
阶段。这是因为在RestoreView
阶段没有应用任何请求值。因此,无法计算可能依赖于这些值的呈现的-属性
我们都在那棵树上。尽管#{bean.id}被计算为2,它还是发生了。我解释说唯一的实例将在树中
JSF的组件树知道所有组件,不管它们是否被渲染。如果组件树中缺少内部组件(尚未渲染的组件),则可以使用render=“outerComponent”将某个组件与其所有内部组件(通常与复选框等一起使用)重新渲染如果内部组件的rendered
-属性现在计算为true,则将无法显示内部组件
为了避免组件被添加到该树中,您必须使用JSTL-标记,例如
-如果计算结果为false,则该组件根本不会被添加到组件树中,因此JSF将在不知道某个组件的情况下开始处理该树
您可能还想阅读这篇文章,其中用示例和更多细节解释了差异: