Xpages部分刷新触发器完全刷新

时间:2012-08-28 18:55:05

标签: xpages xpages-ssjs

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

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

我尝试了onComplete,onStart和onError客户端事件,但是无法弄清楚我是如何找到这次注销的时候,我尝试了以下代码:

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

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

当部分刷新失败或返回空值时,

onError事件永远不会触发。

非常感谢任何想法或帮助。

2 个答案:

答案 0 :(得分:1)

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

<强>更新

你可以:

  • 将一个重定向元标题添加到会话到期时启动的页面(廉价解决方案,但可能已经捕获最常用的情况)
  • 仍然锁定数据库,但为Anonymous提供正确的“查看公共页面”,然后让匿名者可以看到标有“可供公众访问”属性的页面
  • 确保部分刷新检查是否有任何回复并重新加载页面(大部分工作,因为您需要更改业务逻辑) - 需要一些代码示例

答案 1 :(得分:1)

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

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

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

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

  

document.location.href = document.location.href

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

使用XPages Extension Library REST services。与上面相同,如果是Anonymous,则重新加载页面。