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