XPages - 在页面脚本中访问条件调用的sessionScope

时间:2015-10-22 23:36:57

标签: javascript xpages lotus-domino

当用户试图离开页面,关闭标签页或浏览器本身时,我需要弹出警告。我能够使用下面的window.onbeforeunload调用成功构建它。客户将需求修改为仅在网页上有未保存的编辑时弹出窗口。

我为页面上的更改事件添加了sessionScope.Changed = true,并在单击“保存”时将值重置为false。我已经确认正确设置了sessionScope变量。但是,无论价值是什么 - 无论是真还是假,我都无法让弹出窗口正确启动。我也试过在window.onbeforeunload行周围包装if / then然后只用返回消息离开函数。

sessionScope在页面脚本上是不可用的,还是我错误地引用它或者是其他的?

编辑:我的页面使用一系列堆栈容器来模拟选项卡式界面。一旦用户点击另一个选项卡而不保存,这个结构似乎会阻止内置的enableModifiedFlag,这就是为什么我沿着sessionScope变量的路径走下去的原因。

提前谢谢!

  <script language="JavaScript">
      var ch = '#{sessionScope.Changed}';
      window.onbeforeunload = confirmExit;

      function confirmExit() {
       if (ch == true){
         return "You have attempted to leave this page.  If you have >       made any changes without clicking the Save button, your changes will >       be lost.  Are you sure you want to exit this page?";
        }
       else { 
         return "";
     }  
  </script>

3 个答案:

答案 0 :(得分:2)

最可能的问题是对时间的误解。如果您查看源HTML,则会在浏览器页面上看到#{sessionScope.Changed}没有引用。这是因为表达式语言(#{sessionScope.Changed})只能在服务器上进行评估。因此,结果将作为文字值传递到客户端JavaScript。因此,除非您在更改某些内容时进行部分刷新,否则将不会更新该值,因此您将对HTML首次传递到浏览器时的值进行测试。

答案 1 :(得分:1)

您正在设置var ch ='true',但之后尝试测试它是否为布尔值true

从声明行中删除单引号

希望有所帮助

答案 2 :(得分:1)

使用XPage的内置功能显示警告,保留未编辑的页面,其中包含已编辑的字段(而不是带有window.onbeforeunload的CSJS代码):

<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core"
    ...
    enableModifiedFlag="true"
    modifiedMessage="You have attempted to leave this page....">