java - 调用bean时Primefaces RemoteCommand时滞

标签 java performance jsf primefaces remotecommand

我在使用 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 上使用 RequestContextupdate 方法来更新组件。

RequestContext.getCurrentInstance().update("COMPONENT_ID_TO_UPDATE")

关于java - 调用bean时Primefaces RemoteCommand时滞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26991168/

相关文章:

java - Apache POI 发生了非法的反射访问操作

java - Java 9 也适用于 WAR 文件吗?

java - 碰撞分辨率 : Quadratic Probing vs. 单独链接

javascript - Vue 的 ref 是不是每次使用都会进行一次 DOM 查找?

java - 如何获取 <p :column> in a facelet using EL 的嵌套组件

java - 无法在您的 PC 上运行的 Windows 2012 R2 "this app can' 上安装 JDK 7u51(64 位)”

java - 尝试从 fragment 中的 fragment 调用方法并出现 NPE

mysql - 使用临时表是否明智?

PHP 的 StdClass 的 Java 模拟

jsf - 在 JSF/PrimeFaces 中显示复选框列表