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}内部<c:forEach> は常にとして評価されnullます。

したがって、<c:forEach>この特定の機能要件については完全に問題外です。最善の策はを使用すること<ui:repeat>です。beginただし、これはのandend属性のようなものはサポートしていません<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 に答える