JSF 2 ui:repeat vs h:datatable行为

时间:2013-12-15 19:35:40

标签: jsf-2

我有一段时间试图解决p:selectBooleanButton doesn't render preselected value,很多时间只是为了解决它改变ui:重复到h:datatable。

这是两段代码。

 <ui:repeat value="#{presupuestoBean.getItemsPresupuestBySeccion('Parte Delantera')}" var="itemPresupuesto">
    <tr>
        <td><h:outputText value="#{itemPresupuesto.descripcion}"/></td>
        <td>
            <p:selectBooleanButton value="#{presupuestoBean.itemsPresupuestoAsignadoCambiar[itemPresupuesto.id]}" onLabel="Yes" offLabel="No" onIcon="ui-icon-check" offIcon="ui-icon-close"/>
            <h:outputText value="#{presupuestoBean.itemsPresupuestoAsignadoCambiar[itemPresupuesto.id]}" />
        </td>
    </tr>
</ui:repeat>

UI repeat output

(注意,该按钮显示'FALSE(或NO)'值,尽管outputText显示属性值为'TRUE')

另一方面,与h:datatable完全相同的代码。

 <h:dataTable value="#{presupuestoBean.getItemsPresupuestBySeccion('Parte Delantera')}" var="itemPresupuesto2">
    <h:column>
         <h:outputText value="#{itemPresupuesto2.descripcion}"/>
    </h:column>
    <h:column>
        <p:selectBooleanButton value="#{presupuestoBean.itemsPresupuestoAsignadoCambiar[itemPresupuesto2.id]}" onLabel="Si" offLabel="No" onIcon="ui-icon-check" offIcon="ui-icon-close"/>
        <h:outputText value="#{presupuestoBean.itemsPresupuestoAsignadoCambiar[itemPresupuesto2.id]}" />
    </h:column>
</h:dataTable>

Datatable Ouput

任何人都知道为什么会发生这种情况?据我所知,这两个标签可以互换。 (至少根据我看到的例子JSF 2 Repeat Tag Example

我正在使用com.sun.faces jsf-api和jsf-impl 2.2.4 还有Primefaces 4.0

2 个答案:

答案 0 :(得分:1)

我有相同的行为,并且无法使用ui工作:使用地图和默认值正确重复。 当您使用primefaces时,您可能还会发现 p:dataGrid 作为h:dataTable的替代方法。

答案 1 :(得分:1)

您将查看构建时间查看渲染时间混淆了! BalusC在这里发布了一个解释:

JSTL in JSF2 Facelets... makes sense?