Xpages 相当于数据库脚本初始化

Xpages equivalent to Database Script initialize

我在 XPiNC 中 运行ning Xpages。

Xpages 应用程序的常用模式是将 xpHome.xsp 页面设置为打开的第一个页面。在这个 I 页面中,我设置了应用程序级别的任何范围变量,然后转到 "real" 第一页。

现在我 运行 遇到了问题。当状态发生变化时,我当前的数据库将发送电子邮件,这将在文档中包含一个 doc link,它指向要打开的正确 Xpage。但是,因为用户没有浏览主页,所以正在设置我的 applicationScope 变量。

我想我可以通过在 initApp 函数中设置一个信号量来解决这个问题——它要做的最后一件事是在 applicationScope.semaphore 字段中放置一个 "Y"。因此,当我打开我的 Xpage 时,它​​所做的第一件事就是检查它,如果它为空,那么我将调用 initApp 函数。

出于某种原因,这不起作用。但即便如此,我还是想找到相当于旧数据库脚本的 "Initialize" 事件。第一次打开数据库时我可以调用的东西。

其他人如何处理这个问题?

创建一个托管 Java bean "app" 其中

  • 适用于应用范围
  • 设置所有应用程序参数
  • 提供所有应用参数

在 EL 或 Javascript 中使用 app.xxx 访问 bean 或直接调用方法,如 JavaScript 中的 app.getXxx()app.doWhatEverYouWant()

当第一次调用其中一个方法时,bean "app" 会自动初始化。

您可以找到示例 here 作为开始或 google 作为 "XPages managed beans" 以获取更多信息。

是的,您必须将当前代码部分切换为 Java,但从长远来看,这应该是值得的 运行。


如果您想要或必须继续使用 JavaScript,则在自定义控件中初始化您的应用程序范围变量,该控件包含在每个 XPage 中,例如 beforePageLoad 事件中的 layout.xsp。

使用一个额外的变量applicationScope.initialized。使用

检查 Java 脚本中的 applicationScope 变量是否尚未初始化
if (!applicationScope.initialized) { 
    ... initialize your applicationScope variables ...
    applicationScope.initialized = "yes";
}