1

下午好。

我有以下问题,属性值结束

<c: foreach should vary for each row in the datatable, eh trying with expression language but simply does not work.

这是代码:

<ace:dataTable  value="#{TreeTableBk.rubros}" var="rubro"
                paginator="true" paginatorPosition="bottom" rows="10" style="font-size: 12px; font-family: Tahoma, Verdana, Arial, Sans-Serif">
                <ace:column
                    headerText="Informacion">
                    <div align="left">
                    <h:panelGroup>
                        <c:forEach begin="0" end="#{rubro.nivel}">
                            <h:outputText value="__*"></h:outputText>
                        </c:forEach>
                        <h:inputText 
                        value      = "#{rubro.codigoPadre}"
                        rendered   = "#{rubro.final_ == 'N'}"
                        styleClass = "SMRInputTextNegrilla6" 
                        style      = "background-color:#A5CCE7">
                        </h:inputText>
                    <h:inputText 
                        value      = "#{rubro.codigoPadre}"
                        rendered   = "#{rubro.final_ == 'S'}"
                        styleClass = "SMRInputTextNegrilla6" >
                    </h:inputText>
                    <h:inputText 
                        value      = "#{rubro.codigo}"
                        styleClass = "SMRInputTextNegrilla6" 
                        style      = "background-color:#D1F2C7">
                    </h:inputText>
                    <h:inputText 
                        value      = "#{rubro.descripcion}"
                        styleClass = "SMRInputTextNegrilla6" >
                    </h:inputText>
                    <h:inputText value="#{rubro.nivel}" styleClass="SMRInputTextNegrilla6">
                    </h:inputText>
                    </h:panelGroup>
                    </div>
                </ace:column>
            </ace:dataTable>

任何想法如何解决这个问题都会有所帮助。

非常感谢

4

1 回答 1

1

标记处理程序(例如<c:forEach>在构建视图期间运行,而不是在渲染视图期间运行)。UI 组件<h:dataTable>在渲染视图期间运行,而不是在构建视图期间运行。因此,在运行的那一刻<c:forEach><h:dataTable>它没有运行,因此它var="rubro"在 EL 范围内永远不可用,因此#{rubro}inside<c:forEach> 总是评估为null.

因此,<c:forEach>对于这个特定的功能需求来说,这是完全不可能的。您最好的选择是使用<ui:repeat>. 但是,这不支持类似 的beginandend属性的任何东西<c:forEach>。但是,您可以创建一个自定义 EL 函数,该函数创建一个给定大小的虚拟数组,然后将其提供给<ui:repeat value>.

例如

<ui:repeat value="#{my:createArray(robro.nivel)}">
    <h:outputText value="__*" />
</ui:repeat>

public static Object[] createArray(int size) {
    return new Object[size];
}

JSF 实用程序库OmniFaces 正好有一个功能用于此目的,另of:createArray()参见展示示例of:createArray()

也可以看看:

于 2012-10-10T16:20:23.427 回答