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

Bry*_*ler 0 xpages xpages-ssjs xpages-extlib

我在XPiNC中运行Xpages.

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

现在我遇到了一个问题.我的当前数据库将在状态更改时发送电子邮件,这将包括指向文档的文档链接,该文档指向要打开的正确X页.但是,由于用户没有浏览主页,因此我的applicationScope vars正在设置中.

我想我可以通过在initApp函数中设置一个信号量来解决这个问题 - 它最后要做的是在applicationScope.semaphore字段中放置一个"Y".因此,当我打开我的Xpage时,它首先要检查的是,如果它是null,那么我调用initApp函数.

由于某种原因,这是行不通的.但即便如此,我仍希望找到相当于旧数据库脚本"Initialize"的事件.我第一次打开数据库时可以调用的东西.

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

Knu*_*ann 7

创建一个托管Java bean"app"

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

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

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

你可以在这里找到一个开始的例子或google的"XPages managed beans"以获取更多信息.

是的,您必须将当前代码部分切换到Java,但从长远来看它应该是值得的.


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

使用其他变量applicationScope.initialized.检查是否在JavaScript中初始化了applicationScope变量

if (!applicationScope.initialized) { 
    ... initialize your applicationScope variables ...
    applicationScope.initialized = "yes";
}
Run Code Online (Sandbox Code Playgroud)