gpt4 book ai didi

java - JSF:操作调用被延迟

转载 作者:行者123 更新时间:2023-12-01 15:50:43 25 4
gpt4 key购买 nike

我的行动电话延迟可能有哪些原因?我拥有的一种表格上的所有操作调用都会发生这种情况。在我单击将调用操作的任何内容后(或者当应在表单加载时评估数据表的值时),调用操作大约需要 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。对此有什么解释吗?如果我单击这些命令链接之一,我不希望重新呈现数据表。所调用的方法都不是特别“慢”。

最佳答案

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

Getter 方法的目的是返回一些预填充的 bean 属性或最多执行延迟加载,而不是执行昂贵的业务逻辑,例如连接数据库、将 1000 行复制到 Java 内存等。 Getter 方法可以在 JSF 请求期间多次调用,当在像 <h:dataTable> 这样的迭代组件内进行调用时,该方法会呈指数增长。或已用于 rendered属性。 JSF/EL 不会基于每个请求或其他方式缓存 getter 方法的结果,因为正常 getter 调用特别便宜。

另请参阅:

关于java - JSF:操作调用被延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6108969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com