0

在我们维护的一个 XPage 应用程序中,用户在使用它时一直在抱怨“数据丢失”。这意味着当他们提交文档时,他们有时会刷新页面并且他们刚刚编辑的所有字段都是空白的,或者处于原始页面加载时的状态,因此他们经历了数据丢失。花了很多时间来弄清楚发生了什么,他们执行的每一个操作现在都记录在文档中,以便我可以查看它。我们发现了正在发生的事情,我需要想办法解决它:

  1. 在 Chrome / IE 中的窗口 1 中打开文档 - 浏览器不重要。
  2. 在浏览器中打开另一个窗口并在应用程序中搜索相同的文档,打开它(默认以阅读模式打开)
  3. 文档上有多个选项卡,因为有很多信息 - 用户转到他们想要从窗口 2 中的只读副本上复制信息的选项卡
  4. 然后,用户开始在窗口 1 中的可编辑版本中输入信息 - 他们希望引用另一个选项卡式面板上的文档部分,从而将其打开到窗口中。
  5. 用户提交他们的更改。不幸的是,因为他们已经在另一个窗口中打开了文档,然后单击了一个选项卡式面板以打开它的另一部分,所以可编辑版本实际上与服务器内存中的上下文无关(我假设) - 更改丢失了在提交时,用户需要重新输入。

如果他们打开只读版本并且不在选项卡式面板中导航,他们可以继续在可编辑版本中正常工作。似乎提交文档,即使它处于读取模式,也会破坏可编辑版本与服务器的链接。为什么会这样?如何预防?

我想阻止他们在另一个窗口中打开它(虽然不确定如何)作为绝对的最后手段 - 它已成为许多国家的许多用户的一种工作方式。有任何想法吗??

根据要求提供更多信息:好的,所以文件是问题报告。第一个选项卡上有关调用者、受影响模型等的基本详细信息。有一个附件选项卡,除此之外,还有一个解决方案选项卡。

在识别用户在做什么时,他基本上是说,因为他不记得来电者的名字,想向来电者解决解决方案,所以他在另一个窗口中打开了文档。似乎有点懒,但无论如何。

我想前段时间有个名叫 John Mackay 的人写了一篇关于跟踪使用 sessionScope 变量选择的选项卡的帖子,我使用该变量有几个原因。因此,选项卡的 onclick 事件将 sessionScope.tabSelected var 设置为所选内容。当我对文档进行完整更新时,这会有所帮助,因为该人上次使用的选项卡是刷新后默认选择的选项卡。因此,当用户在另一个窗口中打开文档时, sessionscope var 也会导致相同的选项卡在那里打开。

如果用户在“解决方案”选项卡上并且他们在另一个窗口中打开文档,则也选择了解决方案选项卡。然后,他们必须选择“信息”选项卡才能找到呼叫者的姓名,这就是导致问题的原因。也许范围较小的 var 可以修复它?我已经尝试使用 onclick 进行“不更新或验证”和“部分执行”设置,但这并没有解决它。当我明天回到办公室时,我将在不设置范围变量的情况下尝试它,看看这是否解决了任何问题并会报告回来

4

1 回答 1

1

解决了!我有一个选项卡式面板,在定义中,我有:

selectedTab="#{javascript:sessionScope.TabSelected}"

在每个选项卡上,我都有一个事件处理程序,可以设置sessionScope.TabSelected. 我尝试了部分执行模式,我尝试了不验证或更新数据但没有任何效果。

然后我完全删除了每个选项卡上的事件处理程序以及 selectedTab 属性。现在您可以在 1 个窗口中编辑打开文档,然后在另一个窗口中阅读,单击阅读版本中的选项卡,它不会影响可编辑窗口中的文档。提交可编辑的版本,它不会被服务器拒绝,这正是我想要的。

唯一的缺点是,如果您现在对文档执行完整更新并重新加载页面,它将返回到选项卡式面板中的第一个选项卡,而不是您所在的位置。我希望这将被用户接受!

于 2012-08-31T10:29:16.770 回答