Java JSF:操作调用被延迟

Java JSF:操作调用被延迟,java,jsf,Java,Jsf,我的行动电话延迟的可能原因是什么?它发生在一个表单上的所有动作调用中。在我单击一个将调用操作的任意项(或者在表单加载时计算dataTable的值)之后,调用该操作大约需要10秒钟。(我通过设置一个断点来检查它,然后单击按钮。) 你知道为什么吗 这似乎是造成问题的原因: <h:panelGroup id="someGroup"> <h:dataTable value="#{someHandler.keys}" binding="#{someHandler.dataTable}"

我的行动电话延迟的可能原因是什么?它发生在一个表单上的所有动作调用中。在我单击一个将调用操作的任意项(或者在表单加载时计算dataTable的值)之后,调用该操作大约需要10秒钟。(我通过设置一个断点来检查它,然后单击按钮。)

你知道为什么吗

这似乎是造成问题的原因:

<h:panelGroup id="someGroup">
<h:dataTable value="#{someHandler.keys}" binding="#{someHandler.dataTable}" var="key">
    <h:column>
        <f:facet name="header">
            <h:outputText value="Key" />
        </f:facet>
        <h:outputText value="#{key}" />
    </h:column>
    <h:column>
        <f:facet name="header">
            <h:outputText value="Value" />
        </f:facet>
        <h:commandLink value="[No value]" rendered="#{empty someHandler.getValue(key)}">
            <f:ajax listener="#{someHandler.loadProperty}" render="someForm:key someForm:value" />
        </h:commandLink>
        <h:commandLink value="#{someHandler.getValue(key)}" rendered="#{not empty someHandler.getValue(key)}">
            <f:ajax listener="#{someHandler.loadProperty}" render="someForm:key someForm:value" />
        </h:commandLink>
    </h:column>
</h:dataTable>
</h:panelGroup>


在调试期间,我注意到当我单击commandLink时,它总是首先调用someHandler.keys。对此有什么解释吗?如果我单击其中一个commandLinks,我不希望dataTable被重新命名。调用的方法都不是特别“慢”。

我想说,您的浏览器很难使用JSF生成的“糟糕”javascript。你衡量过不同浏览器的性能吗?例如,我建议看看chrome是否运行得更快。

我能想到的唯一可行的解释是,您在getter方法中执行昂贵的业务逻辑,而不是在bean的构造函数或任何其他事件方法中,在必要时只调用一次

Getter方法旨在只返回一些预填充的bean属性,或者最多执行延迟加载,而不是执行昂贵的业务逻辑,如连接数据库、将1000行复制到Java内存中等等。在JSF请求期间,可以多次调用Getter方法,当调用在像
这样的迭代组件中进行时,或者在
呈现的
属性中使用时,该调用会成倍增长。JSF/EL不会在每个请求的基础上缓存getter方法的结果,因为普通的getter调用非常便宜

另见:

您是否使用任何组件库?这种情况是否也发生在只有一个表单和一个按钮的非常小的页面上,以及只有一个操作方法的支持bean上?它只发生在一个表单上。我可以指出部分原因,如果我删除它,但该部分本身是无害的。如果单击该部分中的某个操作,则调用该操作需要10秒钟。我用的是战斧(不是这种形式)。我在一个数据表中显示了一堆commandLinks,它们现在都有这个“youhavevistedme”颜色。(他们以前没有!)如果我将commandLinks更改为commandbutton,它将保持不变。然后您需要显示代码并指出导致问题的部分。至于访问的CSS,这可能是真的,因为JSF POST表单提交到您当前查看的同一页面,并且浏览器仅在URL出现在浏览器历史记录中时才将链接标记为已访问。您可能只想使用
h:outputLink
获取链接。潮湿的你好!谢谢你的猜测,IE也需要同样长的时间。我会看看Chrome的速度是否更快,但我对此表示怀疑。表格也不是很复杂/很大(getter应该不是问题所在。我注意到Firefox渲染页面的源代码大约需要5秒钟,尽管它只有250行。对于其他xhtml文件来说,速度要快得多。我想这意味着生成的html代码有问题?有没有办法找出问题所在?