在8.5.3中注销时触发完全刷新。我不关心数据是否丢失,如果用户注销或会话超时,部分刷新失败,我只想触发完全刷新。
我打开了两个窗户。如果我按下窗口2上的注销按钮,然后返回到窗口1并尝试进行部分刷新,则不返回任何内容(只是该控件的空白值)。那么如何在用户注销时触发完全刷新?
我尝试了onComplete,onStart和onError客户端事件,但是无法弄清楚我是如何找到这次注销的时候,我尝试了以下代码:
var strUserName = '#{javascript: @Name("[CN]", @UserName());}';
alert("Start: " + strUserName);
即使用户在窗口2中注销,它总是在窗口1中返回用户名而不是匿名用户!
当部分刷新失败或返回空值时,onError事件永远不会触发。
非常感谢任何想法或帮助。
答案 0 :(得分:1)
您是否尝试锁定数据库(Anonymous = NoAccess)?然后你应该得到一个404并且错误例程触发。
<强>更新强>
你可以:
答案 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,则重新加载页面。