首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用bean时面临的RemoteCommand时间差

调用bean时面临的RemoteCommand时间差
EN

Stack Overflow用户
提问于 2014-11-18 09:48:49
回答 1查看 3.5K关注 0票数 2

我有性能问题与RemoteCommand标号豆方法的时间滞后。

使用PrimeFaces4.0,我们的xhtml页面在运行时将大量div加载到面板中

代码语言:javascript
复制
<p:outputPanel id="runtime_panel" autoUpdate="true" />

一些SelectOneRadio控件通过setOnchange()方法拥有侦听器。他们调用RemoteCommand,这是在设计时在xhtml页面中定义的:

代码语言:javascript
复制
<p:remoteCommand name="ourRemoteCommand" 
actionListener="#{bean.someMethod}" update="runtime_panel"
/>

bean.someMethod的目的是通过ajax在页面中显示或隐藏某些GUI控件。Bean是请求的作用域。

问题是,当从客户端调用bean.someMethod时,存在一定的时间差。在我的测试中,javascript会突然响应,但是当我通过服务器端的断点捕获bean.someMethod时,会有相当长的延迟时间--大约2.5秒。

我还将bean范围更改为会话范围以消除构建阶段的滞后,但是这个缝没有问题--它没有解决时间滞后问题。

如果"runtime_panel“中只有少量元素,我没有注意到任何滞后,断点在"bean.someMethod”中立即停止。控制数量与响应时间之间存在相关关系。

我还创建了另一个测试放置虚拟RemoteCommand在页面的开头,以自己的形式。

代码语言:javascript
复制
<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元素时,服务器端开始执行时也存在时间延迟,即使与此RemoteCommand "rcgg”没有任何关系。真奇怪。

我还测试了几个RemoteCommand分布(

代码语言:javascript
复制
immediate="false" async="true" partialSubmit="true" ignoreAutoUpdate="true" process="@none" global="false"  
 update="@none"

)但也没有成功。

我不知道如何摆脱这种“豆类呼叫滞后”。

我真的需要你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2014-11-19 06:14:35

通常,您必须在process=@this上使用p:remoteCommand,否则它将提交整个h:form及其组件。

因此,最好将p:remoteCommand保存在单独的h:form中。

如果这也不起作用,您可以始终使用RequestContextupdate方法在ManagedBean上更新组件。

代码语言:javascript
复制
RequestContext.getCurrentInstance().update("COMPONENT_ID_TO_UPDATE")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26991168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档