在 Facelets 标签内使用 的 EL 变量

2024-02-13

我有一个Home. Each Home有一个列表Rooms. Each Room有零个或多个Persons.

我想统计每个家庭的总人数。但我无法添加新变量来记录任何支持 bean 或实体中的人数。所以我只想通过以下方式在视图中计算它<c:set>.

我的第一次尝试如下:

<c:set var="personCount" value="${0}" />
<ui:repeat var="home" value="#{mybackingBean.homes}">
    <ui:repeat var="room" value="#{home.rooms}">
        ${personCount += room.persons.size()}
    </ui:repeat>
    <h:panelGrid columns="2">
        <h:outputLabel value="#{home.id}" />
        <h:outputLabel value="#{personCount}" />
    </h:panelGrid>
</ui:repeat>

我怎样才能实现它?


有几个错误。


First,

${personCount += room.persons.size()}

在 EL 中,+= is the 字符串连接运算符 http://docs.oracle.com/javaee/7/tutorial/jsf-el005.htm#BNAIK。所以,这基本上会给你结果String.valueOf(personCount) + String.valueOf(size)。如果计数初始化为0并且有3人,那么这将打印03.

您基本上想重新分配结果personCount + size返回变量personCount。您需要使用重新设置变量<c:set>如下。

<c:set var="personCount" value="${personCount + room.persons.size()}" />

Second,

<c:set var="personCount" value="${0}" />
<[for each home]>
    <[for each room]>
        <c:set var="personCount" value="${personCount + room.persons.size()}" />

The personCount初始化为0在两次迭代之外。因此,对于每个家庭,您也可以通过这种方式计算之前所有家庭的人数。您想在第一次迭代中声明它。

<[for each home]>
    <c:set var="personCount" value="${0}" />
        <[for each room]>
            <c:set var="personCount" value="${personCount + room.persons.size()}" />

这与 EL 无关。这只是一个逻辑错误,在“plain vanilla”Java 中也会导致同样的问题。


Third,

JSTL 标签如<c:set>在视图构建期间(从 XHTML 模板转换为 JSF 组件树期间)运行。 JSF 组件如<ui:repeat>在视图渲染期间(从 JSF 组件树转换为 HTML 输出期间)运行。所以<c:set>期间不运行<ui:repeat>迭代。因此,它看不到迭代变量var。您基本上还需要在视图构建期间进行迭代。你可以使用JSTL<c:forEach>为了这。

因此,总而言之,您的预期解决方案如下所示:

<c:forEach items="#{bean.homes}" var="home">
    <c:set var="personCount" value="${0}" />
    <c:forEach items="#{home.rooms}" var="room">
        <c:set var="personCount" value="${personCount + room.persons.size()}" />
    </c:forEach>

    <h:panelGrid columns="2">
        <h:outputLabel value="#{home.id}" />
        <h:outputLabel value="#{personCount}" />
    </h:panelGrid>
</c:forEach>

有关深入的解释,另请参阅JSF2 Facelets 中的 JSTL...有意义吗? https://stackoverflow.com/questions/3342984/jstl-in-jsf2-facelets-makes-sense


然而,作为+=运算符显然不会在您的情况下导致 EL 异常,这意味着您已经在使用 EL 3.0。这反过来意味着您可以使用新的EL 3.0 lambda 和流功能 http://docs.oracle.com/javaee/7/tutorial/jsf-el004.htm.

<ui:repeat value="#{bean.homes}" var="home">
    <h:panelGrid columns="2">
        <h:outputLabel value="#{home.id}" />
        <h:outputLabel value="#{home.rooms.stream().map(room -> room.persons.size()).sum()}" />
    </h:panelGrid>
</ui:repeat>

不再需要计数循环。不,这不需要 Java 8,它也可以在 Java 7 上运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Facelets 标签内使用 的 EL 变量 的相关文章

随机推荐

  • 根据列表框尺寸调整列表框内容的大小

    我正在尝试根据列表框本身调整列表框内容的大小 这是在 WPF 中完成的 关于这如何可能的任何想法 我认为当您说 调整大小 时 您的意思是您想要在两个方向上拉伸项目 要采用默认的列表框并水平拉伸项目 您需要做的是
  • C++ 求两个向量之间的差异

    假设你有 2 个向量 vector
  • 如何在 Eclipse 中找到可重写的方法

    public class test2 extends ListActivity 例如 我想找到 ListActivity 中可以重写的方法是什么 在 eclipse 中找到这个的快捷键是什么 如何通过 eclipse intellisens
  • 如何将 fancybox 绑定到动态添加的元素?

    我使用 jquery fancybox 1 3 4 作为弹出表单 但我发现 fancybox 无法绑定到动态添加的元素 例如 当我向当前文档添加 html 元素时 像这样 首先我使用 jquery 将一个元素附加到主体 document b
  • Jackson - 将内部对象列表反序列化为更高级别的列表

    使用 Spring Boot 和 Jackson 如何将包装 内部列表直接反序列化为外层列表 例如 我有 transaction items item itemNumber 193487654 itemDescription Widget
  • 从 JavaScript 手动触发 iPhone/iPad/iPod 键盘

    我正在开发一个 HTML 代码编辑器 使用简单的 DIV 并捕获事件 当我在 iPad 上使用它时 键盘永远不会弹出 因为从技术上讲我并不处于可编辑字段中 有没有办法以编程方式告诉 iPad 我需要键盘 如果您的代码是通过用户操作启动的某些
  • 将 pop() 与 JavaScript 关联数组结合使用

    我怎样才能在JS中做类似下面的事情 我想模仿 pop 在对象而不是数组上 var deck cardK 13 cardQ 12 cardAJ 11 var val deck pop console log Key val key conso
  • Python 代码块的正则表达式?

    如何创建一个可以匹配行开头以及以 tab 开头的所有以下行的正则表达式 例如 not keyword not this line keyword and random text this line this line and this li
  • 从 CSV 文件创建 ODS 工作表

    我有一组 CSV 文件 需要将其转换为具有多个选项卡式工作表的单个 ODS 甚至 Excel 电子表格 目前我正在使用 python 的 pyexcel 库 但它有很多错误并且速度非常慢 Libreoffice 有一个很好的文件转换实用程序
  • Android:从 Hashmap Arraylist 获取单个值?

    基本上 我有一个使用哈希映射的数据库 运行查询后 我想输出 ID 并将其存储在另一个活动的数组中 之后 我想访问数组中的单个元素 这是我的数据库代码 public ArrayList
  • test_that 与 match.fun 在使用两层深度时会引发意外错误

    我使用时遇到问题match fun和 一起test that when match fun用于嵌套函数内部 为了说明这一点 我构建了一个包含两个函数的快速玩具示例 R 包 后者简单地调用前者 i dont throw error lt fu
  • 当成员也是分层结构时,如何构建类结构?

    我正在构建一个 PHP Web 应用程序 它应该为用户提供订购他与另一个人 组织之间的 ConnectDirect 或文件传输网关 连接的 安装 设置的可能性 连接实现的技术细节并不重要 在应用程序中 它只涉及作为产品的连接 可以订购和管理
  • 手机重启后小部件不显示

    我创建了一个小部件 它工作得很好 直到我重新启动手机 然后小部件不会显示它是不可见的 但如果我按住并单击我可以将它扔进垃圾箱 我有一个从 widgetprovider 中的配置活动调用的函数 它执行以下操作 static void upda
  • 如何通过子进程模块调用 ssh 以便它使用 SSH_ASKPASS 变量

    我正在编写一个使用 SSH 命令的 GUI 我尝试使用 subprocess 模块调用 ssh 并设置 SSH ASKPASS 环境变量 以便我的应用程序可以弹出一个窗口要求输入 SSH 密码 但是 我无法使用给定的 SSH ASKPASS
  • 如何从单个输入获取多个文件输入

    使用 Firefox 和 Chrome 浏览器 我有一个输入文件元素
  • Ruby on Rails - 数组哈希、按列名分组和求和

    我有以下哈希数组 idx gt 1234 账户 gt abde 钱 gt 4 00 order gt 00001 idx gt 1235 account gt abde money gt 2 00 order gt 00001 idx gt
  • 执行程序时的Fortran77参数

    我目前正在做 Fortran77 作业 所以请不要告诉我确切的编码 但请给我一些我想要做什么的提示 使用UNIX终端 我想通过执行来获取传递的参数 program exe parameter 在标准 Fortran77 中你不能 故事结局
  • 在 Ruby 中处理 ARGV,无需 if...else 块

    在一篇关于无条件编程 http michaelfeathers typepad com michael feathers blog 2013 11 unconditional programming html迈克尔 费瑟斯 Michael
  • 在 Ruby 中,为什么 && 工作而 || 工作我的示例代码中没有吗?

    在我的示例代码中 我尝试替换 text 中与 redact 或 redact again 匹配的任何单词 因为这是一个非此即彼的场景 我想 会被使用 事实证明 实际上有效 如果两者或其中之一匹配 它将正确地用 已编辑 一词替换它们 如果找不
  • 在 Facelets 标签内使用 的 EL 变量

    我有一个Home Each Home有一个列表Rooms Each Room有零个或多个Persons 我想统计每个家庭的总人数 但我无法添加新变量来记录任何支持 bean 或实体中的人数 所以我只想通过以下方式在视图中计算它