【问题标题】:JSF 'total' variable for datatable数据表的 JSF“总”变量
【发布时间】:2011-10-26 19:22:44
【问题描述】:

我已阅读上一篇文章:JSF 'total' variable something like c:set in JSTL。尽管答案表明总数应来自支持 bean,但我确实需要在 facelet 中执行此操作。对于我的例子,我想显示一个银行存折类型的数据表,每一行包含一个日期、一个描述、一个金额和一个运行总计。数据来自 List 类型的 JPA 获取。如果我在后备 bean 中进行了总计,我需要迭代列表,创建一个数据模型仅用于运行总计属性。这确实是低效的。

我试过了:

<c:set var="sum" value="0.0" scope="view" />
    <table>
<ui:repeat value="#{xxxBean.items}" var="item">
    <tr>
        <td><h:outputText value="#{item.date1}" /></td>
        <td><h:outputText value="#{item.desc}" /></td>
        <td><h:outputText value="#{item.amount}" /></td>
    <c:set var="sum" value="${sum+item.amount}"/>
        <td><h:outputText value="${sum}" /></td>
    </tr>
</ui:repeat>
    </table>

但它不起作用,${sum} 将每行重置为零。除了制作自定义组件,还有其他方法吗?

【问题讨论】:

  • 您不能以这种方式将 JSTL 与 JSF 混合使用。

标签: java jsf jstl


【解决方案1】:

这仍然可以使用支持 bean 中的方法解决:

public class MyBackingBean {

 private Double runningTotal = 0.0;

 public Double getRunningTotal(Item item) {
   Double result = runningTotal;
   runningTotal += item.getAmount();
   return result;
 }

}

然后在您的视图中,使用它来显示运行总计:

<td><h:outputText value="#{xxxBean.getRunningTotal(item)}" /></td>

不优雅,但它有效。

【讨论】:

  • 不,它不起作用。 #{xxxBean.getRunningTotal(item)} 是不可接受的,只有 #{xxxBean.runningTotal} - 没有参数 getRunningTotal()
  • 您使用的是什么版本的 JSF?在 JSF 2 中,您可以将参数传递给方法表达式。
  • 我在 tomcat 6.0 上使用 Mojarra 2.0.2。
  • 在 EL 2.2 中添加了参数支持 - 因此您需要打开 Tomcat 7 和 Servlet 3.0 支持。 (这通常是 EL - 影响 JSTL JSF)stackoverflow.com/questions/5273729/…
猜你喜欢
  • 1970-01-01
  • 2023-03-13
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多