1

在 8.5.3 中注销时触发完全刷新。我不在乎数据是否丢失,我只想在部分刷新失败时触发完全刷新,以防用户注销或会话超时。

我有两个窗户打开。如果我按下窗口 2 上的注销按钮,然后回到窗口 1 并尝试进行部分刷新,它不会返回任何内容(只是该控件的空白值)。那么如何在用户注销时触发完全刷新呢?

我尝试了 onComplete、onStart 和 onError 客户端事件,但无法弄清楚如何知道何时发生此注销,我尝试了以下代码:

var strUserName = '#{javascript: @Name("[CN]", @UserName());}';
alert("Start: " + strUserName);

它总是在窗口 1 中返回用户名而不是匿名用户,即使用户在窗口 2 中注销也是如此!

当部分刷新失败或返回空白值时,onError 事件永远不会触发。

任何想法或帮助将不胜感激。

4

2 回答 2

1

您是否尝试锁定数据库(匿名 = NoAccess)?然后你应该得到一个 404 并触发错误例程。

更新

你可以:

  • 将重定向元标头添加到会话到期时启动的页面(便宜的解决方案,但可能已经捕获了大多数用例)
  • 仍然锁定数据库,但给 Anonymous 权限“查看公共页面”,然后将允许匿名查看的页面标记为“可供公共访问”属性
  • 确保您的部分刷新检查是否没有任何内容返回并重新加载页面(大部分工作,因为您需要更改业务逻辑) - 需要一些代码示例
于 2012-08-29T03:37:41.727 回答
1

onComplete 有一个弱点。值绑定在页面呈现时进行评估,而不是在部分刷新之后,如您所想。这是由于请求的工作方式。发送请求时,会绑定请求的回调(onStart、onComplete 等)。因此,客户端处理程序代码必须在刷新发生之前可用。

如果部分刷新没有使用事件处理程序(onComplete/onStart/onError)刷新项目,我认为值绑定仅在页面加载时更新。

有几种方法可以解决这个问题。

有一个客户端功能,对隐藏的(通过 CSS)xp:text/etc 进行部分刷新。显示当前用户名。使用 NodeReferenceVariable.innerHTML 获取内容。如果 Anonymous 是当前用户:

document.location.href = 文档.location.href

您也可以执行 document.location.reload(),但这可能会导致重新发送提交。

使用XPages 扩展库 REST 服务。同上,如果匿名,则重新加载页面。

于 2012-08-30T09:03:23.027 回答