2009-08-31 62 views
2

当我点击一个链接时,会弹出一个窗口弹出窗口。我有一个会话托管bean加载java.util.List.It需要几秒钟来加载该列表。JSF并发问题

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

我手上

1)两种可能的解决方案引入synchronized块

问:介绍synchronized块会导致性能问题,在多线程环境中?

2)javascript一旦点击就禁用链接。

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

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

回答

2

我会选择选项1.同步会话中的某些内容或它自己的会话bean。在单一服务器环境中,这应该是非常安全的,但在不使用粘性会话的群集中,您将不得不寻找更好的单身人士。

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

1

一个替代解决方案是使POPUP窗口模态窗口意味着父窗口将 模糊/盖过,直到弹出窗口关闭。 搜索JavaScript代码。

+0

Richfaces已经提供了一个模态弹出窗口(模式面板)。其他馆藏也可能提供这样的组件。 – romaintaz 2009-08-31 08:49:33

+0

我不允许使用模态窗口。 ;( – Madhu 2009-08-31 09:13:09

0

选择第二个选项。

+0

)描述这个选择会是一个更好的选择!为什么你建议第二个选项并不是显而易见的。 – Iravanchi 2010-06-28 08:27:24