【问题标题】:c:forEach.items getting repetitively calledc:forEach.items 被重复调用
【发布时间】:2011-02-05 02:21:35
【问题描述】:

环境:Seam,Richfaces

以下代码 sn-p 导致方法 getUsers 被多次调用,我如何在我的应用程序中避免这种情况,以便它只被调用一次。

<c:forEach items="#{userHome.getUsers()}" var="_user">
</c:forEach>

【问题讨论】:

    标签: jsp jsf seam richfaces jstl


    【解决方案1】:

    看在上帝的份上,如果您关心性能避免使用 EntityHome/Query 框架。只需在您的getResultList() 上放置一个断点或输出,然后查看它被调用了多少次。现在用普通的接缝组件尝试同样的想法。你会看到一个显着的变化(!)

    【讨论】:

    • 我已经看到了这种方法被多次调用的行为,不是工厂注释应该解决这个问题。
    • 这是一种方法。您也可以使用 Unwrap。但是你不能在所有方法上都有工厂。 (可以,但不明智)。
    【解决方案2】:

    经验法则是在使用 JSF 时避免使用 &lt;c: 标记(除非您确定它们按预期工作)

    这里最好换成:

    <a4j:repeat value="#{userHome.users}" var ="_user">
    </a4j:repeat>
    

    (或 &lt;ui:repeat&gt;,如果使用 facelets)

    附:我猜getUsers() 是 JBoss 的 EL 扩展,但我建议除非真的需要,否则不要使用它的扩展功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-15
      • 2023-03-19
      • 2019-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多