Общая переменная JSF что-то вроде c: set в JSTL

Я не люблю JSF, но мне нужно решить эту проблему с его помощью, я работаю в "чистом" JSF. Итак, это то, что мне очень нужно, но я не знаю, как это сделать с помощью JSF:

<c:set var="total" value="0"></c:set>

<c:forEach var="item" items="${cart}">
    <tr>
        <td>${item.product.name}</td>
        <td>${item.product.price}</td>
        <td>${item.quantity}</td>
        <td>${item.product.price * item.quantity}</td>
    </tr>
    <c:set var="total" value="${total + item.product.price * item.quantity}"></c:set>
</c:forEach>

Теперь я могу отображать общее значение с помощью простого ${total}, как вы знаете.

Моя таблица JSF выглядит так:

    <h:dataTable var="item" value="#{mbProducts.cart_items}" binding="#{mbProducts.tableComponent}" border="1">

        <h:column>
            <f:facet name="header">
                <h:outputText value="NAME" />
            </f:facet>

            <h:outputText value="#{item.product.name}" />
        </h:column>

        <h:column>
            <f:facet name="header">
                <h:outputText value="PRICE" />
            </f:facet>

            <h:outputText value="#{item.product.price}" />
        </h:column>

        <h:column>
            <f:facet name="header">
                <h:outputText value="NUM" />
            </f:facet>

            <h:outputText value="#{item.quantity}" />
        </h:column>

        <h:column>
            <f:facet name="header">
                <h:outputText value="TOTAL PRICE" />
            </f:facet>

            <h:outputText value="#{item.product.price * item.quantity}"/>
        </h:column>

    </h:dataTable>

Но я не знаю, как установить общую переменную, которая будет увеличиваться на каждой итерации? Как это решить?!


person Splendid    schedule 13.10.2009    source источник
comment
Я не нашел решение JSF для этого, которое отстало, и я модифицировал бэкэнд-бин, поэтому проблема вроде как решена, но мне все еще интересно узнать, возможно ли это решить только с помощью JSF   -  person Splendid    schedule 13.10.2009


Ответы (3)


почему бы вам просто не выполнить расчет в вспомогательном компоненте и просто использовать jsf для его извлечения?

И чтобы ответить на ваш вопрос, я не знаю возможности устанавливать переменные, используя только библиотеки JSF.

person Hendrik    schedule 13.10.2009
comment
Я хочу избежать этого, потому что я изучаю JSF, это не проблема реализовать в компоненте поддержки, но я хочу сделать это в JSF, если это возможно? - person Splendid; 13.10.2009
comment
Поскольку вы изучаете JSF, вы должны определить, что делать на стороне презентации и что делать на стороне сервера. Итого обычно представляет собой значение, которое вы можете вычислить на стороне сервера и использовать геттер только на страницах JSF. - person Romain Linsolas; 13.10.2009
comment
Цель решить что-то только с помощью JSF не означает, что вы ограничены решением только в своей разметке. JSF также включает в себя ваши резервные компоненты, поэтому вам решать, что лучше вычислять в ваших компонентах или на ваших страницах. Общий расчет определенно принадлежит вашему вспомогательному компоненту, а не странице. В конце концов, вы ВСЕ ЕЩЕ делаете это с JSF. - person InverseFalcon; 18.12.2009

Интересная деталь: тег <c:set> будет доступен в JSF. 2.0.

person cetnar    schedule 27.10.2009

вы одновременно смешиваете теги времени сборки дерева и теги времени рендеринга. замените c:forEach на ui:repeat, см. здесь c:foreach vs ui:repeat< /а>

person Toskan    schedule 09.07.2012