我在使用 RemoteCommand caling bean 方法时滞时遇到了性能问题。
使用 primefaces 4.0,我们的 xhtml 页面,在运行时加载大量
div进入面板
<p:outputPanel id="runtime_panel" autoUpdate="true" />
一些 SelectOneRadio 控件通过 setOnchange() 方法具有监听器。 他们调用 RemoteCommand,它在设计时在 xhtml 页面中定义:
<p:remoteCommand name="ourRemoteCommand"
actionListener="#{bean.someMethod}" update="runtime_panel"
/>
bean.someMethod 的作用是通过ajax 在我们的页面中显示或隐藏某些GUI 控件。 Bean 是请求范围的。
问题是,当从客户端调用 bean.someMethod 时,存在一定的时间延迟。 在我的测试中,javascript 突然响应,但是当我通过服务器端的断点捕获 bean.someMethod 时,存在相当长的延迟 - 大约 2.5 秒。
我还将 bean 作用域更改为 session 作用域以消除构造阶段滞后,但这不是问题 - 它没有解决时间滞后问题。
如果“runtime_panel”中只有少量元素,我没有注意到任何延迟, 并且断点在“bean.someMethod”中立即停止。控件数量与响应时间之间存在相关性。
我还创建了另一个测试 - 以自己的形式将虚拟 RemoteCommand 放在页面的开头。
<form>
<p:remoteCommand name="rcgg" partialSubmit="true" process="@this" update="@none" actionListener="#{bean.testMethod()}" />
<h:outputText id="msgs" value="Ajax Submit" />
<p:commandButton type="button" onclick="console.log('client start');rcgg('ddd');console.log('client end')" value="Ajax1" icon="ui-icon-refresh" />
</form>
因此,服务器端代码也会立即执行。但是当“outputPanel”有很多gui元素时,也会出现时滞 当服务器端开始执行时,即使与这个远程命令“rcgg”没有任何关系。奇怪。
我还测试了几个 RemoteCommand arributes (
immediate="false" async="true" partialSubmit="true" ignoreAutoUpdate="true" process="@none" global="false"
update="@none"
) 但也没有成功。
我不知道如何摆脱这种“bean 调用滞后”。
我真的需要你的帮助。
最佳答案
通常你必须在 p:remoteCommand
上使用 process=@this
否则它将提交整个 h:form
及其组件.
所以最好将 p:remoteCommand
放在单独的 h:form
中。
如果这也不起作用,您始终可以在 ManagedBean 上使用 RequestContext
的 update
方法来更新组件。
RequestContext.getCurrentInstance().update("COMPONENT_ID_TO_UPDATE")
关于java - 调用bean时Primefaces RemoteCommand时滞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26991168/