Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/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内部数据表不考虑外部表的呈现条件_Jsf_Datatable_Rendered Attribute - Fatal编程技术网

JSF内部数据表不考虑外部表的呈现条件

JSF内部数据表不考虑外部表的呈现条件,jsf,datatable,rendered-attribute,Jsf,Datatable,Rendered Attribute,我对JSF生命周期的理解非常粗糙。在这一点上,我了解到ApplyRequestValues阶段中有一个非常早的错误,因此恢复了以前的状态,没有任何更改 我不明白的是,为了满足呈现“item.typeA”的条件,该对象必须是typeA的实例。但在这里,看起来该对象通过了条件,即使它是TypeB的实例。这就像是在计算外部数据表(outerItems)之前先计算内部数据表(InnerItems)。我的工作假设是,我不知道渲染属性实际是如何/何时计算的。 [3/26/10 12:52:32:781 ES

我对JSF生命周期的理解非常粗糙。在这一点上,我了解到ApplyRequestValues阶段中有一个非常早的错误,因此恢复了以前的状态,没有任何更改

我不明白的是,为了满足呈现“item.typeA”的条件,该对象必须是typeA的实例。但在这里,看起来该对象通过了条件,即使它是TypeB的实例。这就像是在计算外部数据表(outerItems)之前先计算内部数据表(InnerItems)。我的工作假设是,我不知道渲染属性实际是如何/何时计算的。


[3/26/10 12:52:32:781 EST] 0000008c SystemErr     R   javax.faces.FacesException: Error getting property 'options' from bean of type TypeB
    at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:89)
    at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java(Compiled Code))
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:91)
    at com.ibm.faces.portlet.FacesPortlet.processAction(FacesPortlet.java:193)

不知何故,在我长达数小时的猜测/寻卵迭代中,我没有想到将渲染条件直接添加到数据表中(我真的很绝望)。我仍然不明白为什么这在一开始不起作用,但它正在起作用。

我知道这是一篇老文章,但。。。如果您仍然想知道为什么在第一个代码段中它不起作用,可能是因为缺少右大括号:

 <h:column rendered="#{item.typeA}">
        <h:dataTable cellpadding="0" cellspacing="0"
        styleClass="list_table" id="InnerItems"
        value="#{item.options}" var="option" border="0"
        rendered="#{item.typeA}"> <!--  THIS IS THE CHANGE -->
            <h:column >
                <h:outputText value="Option: #{option.displayValue}"/>
            </h:column>
        </h:dataTable>
    </h:column>

当您将呈现条件放在datatable上时,这是正确设置的

<h:column rendered="#{item.typeA">
<h:column rendered="#{item.typeB">
rendered=“#{item.typeA}”>

这只是一个粗心的OP打字错误。如果这是真的,OP在查看页面时会立即面临异常,而不是在提交页面时。
<h:column rendered="#{item.typeA">
<h:column rendered="#{item.typeB">
rendered="#{item.typeA}"> <!--  THIS IS THE CHANGE -->