Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF并发问题_Jsf_Concurrency_Synchronization - Fatal编程技术网

JSF并发问题

JSF并发问题,jsf,concurrency,synchronization,Jsf,Concurrency,Synchronization,当我点击一个链接时,会打开一个窗口弹出窗口。我有一个会话管理bean,加载一个java.util.List。加载该列表需要几秒钟的时间 当我点击链接两次时,我得到了并发修改异常。因为页面处于会话模式,并且第一个请求仍在加载列表,所以在第二个请求结束之前,它会尝试更新列表 我手头有两个可能的解决办法 1) 引入同步块 问题:在多线程环境中引入同步块会导致性能问题吗 2) javascript来禁用单击后的链接 问题:这不是一个好的选择,因为我们需要在加载弹出窗口后恢复javascript的状态。如

当我点击一个链接时,会打开一个窗口弹出窗口。我有一个会话管理bean,加载一个java.util.List。加载该列表需要几秒钟的时间

当我点击链接两次时,我得到了并发修改异常。因为页面处于会话模式,并且第一个请求仍在加载列表,所以在第二个请求结束之前,它会尝试更新列表

我手头有两个可能的解决办法

1) 引入同步块

问题:在多线程环境中引入同步块会导致性能问题吗

2) javascript来禁用单击后的链接

问题:这不是一个好的选择,因为我们需要在加载弹出窗口后恢复javascript的状态。如果弹出窗口异常终止,链接有可能永久禁用


这个问题还有其他解决方案吗?

另一种解决方案是使弹出窗口模式窗口意味着父窗口将 在关闭弹出窗口之前,模糊/遮光。
搜索JavaScript代码。

选择第二个选项。

我会选择选项1。在会话中或会话bean中的某个内容上进行同步,这是自同步。在单服务器环境中,这应该是非常安全的,但在不使用粘性会话的集群中,您必须寻找更好的单例


性能不应该受到影响,因为您将为特定会话bean的每个用户会话进行同步,如果没有争用,那么成本就不值得考虑

如果您使用的是rich faces,则可以使用rich faces的4J库并重新启动弹出链接

<a4j:commandButton id="popupLinkId" onlick="window.open("popupLink");return false;"  reRender="popupLinkId" />

链接了解更多详细信息。

Richfaces已经提供了一个模式弹出窗口(modalPanel)。其他图书馆也可能提供这样的组件。我不允许使用模态窗口;(描述选择会是一个更好的选择!不清楚你为什么建议第二个选择。