【问题标题】:JSF 'total' variable something like c:set in JSTLJSF“总”变量类似于 JSTL 中的 c:set
【发布时间】:2023-03-13 09:02:01
【问题描述】:

我不喜欢 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>

但我不知道如何设置每次迭代都会增加的总变量? 怎么解决?!

【问题讨论】:

标签: java jsf jstl


【解决方案1】:

为什么不直接在 backing bean 中进行计算,然后使用 jsf 来检索呢?

为了回答您的问题,我不知道仅使用 JSF 库来设置变量的可能性。

【讨论】:

  • 我想避免这种情况,因为我正在学习 JSF,在 backing bean 中实现它不是问题,但如果可能的话我想在 JSF 中实现它?
  • 因为你正在学习JSF,你必须定义在表示端做什么,在服务器端做什么。总计通常是您可以在服务器端计算的值,并且只能在 JSF 页面上使用 getter。
  • 仅使用 JSF 解决问题的目标并不意味着您仅限于在标记中解决问题。 JSF 也包括您的支持 bean,因此您可以自行决定是否在您的 bean 中或在您的页面中更好地计算某些东西。总计算绝对属于您的支持 bean,而不是页面。归根结底,您仍然在使用 JSF 进行此操作。
【解决方案2】:

有趣的细节 - &lt;c:set&gt; 标签将在 JSF 2.0 中可用。

【讨论】:

    【解决方案3】:

    您同时混合了树构建时间标签和渲染时间标签。 将 c:forEach 替换为 ui:repeat 参见此处c:foreach vs ui:repeat

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多