Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 即使渲染属性为false,组件仍然会在组件树中结束_Jsf_Jsf 2_Rendered Attribute - Fatal编程技术网

Jsf 即使渲染属性为false,组件仍然会在组件树中结束

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

莫哈拉2.1

我检查了类
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将在不知道某个组件的情况下开始处理该树

您可能还想阅读这篇文章,其中用示例和更多细节解释了差异: