我在XPiNC中运行Xpages。
我常用的Xpages应用程序模式是将xpHome.xsp页面设置为打开的第一个页面。在这个I页面中,我设置了应用程序级别的任何范围变量,然后前往“真正的”第一页。
现在我遇到了一个问题。我的当前数据库将在状态更改时发送电子邮件,这将包括指向文档的文档链接,该文档指向要打开的正确X页。但是,由于用户没有浏览主页,因此我的applicationScope vars正在设置中。
我认为我可以通过在initApp函数中设置信号量来解决这个问题 - 它最后要做的是在applicationScope.semaphore字段中放置一个“Y”。因此,当我打开我的Xpage时,它首先要检查的是,如果它是null,那么我调用initApp函数。
由于某种原因,这不起作用。但即便如此,我仍希望找到相当于旧数据库脚本“Initialize”的事件。我第一次打开数据库时可以调用的东西。
其他人如何处理这个问题?
答案 0 :(得分:7)
创建托管Java bean" app"哪个
使用EL或Javascript中的app.xxx
访问bean,或直接调用JavaScript中的app.getXxx()
或app.doWhatEverYouWant()
方法。
bean" app"当第一次调用其中一个方法时,会自动获得初始化。
您可以找到一个示例here用于开始或谷歌用于" XPages托管bean"了解更多信息。
是的,您必须将当前代码部分切换到Java,但从长远来看它应该是值得的。
如果您想要或不得不继续使用JavaScript,那么在自定义控件中初始化您的应用程序范围变量,该控件包含在每个XPage中,例如在beforePageLoad事件中的layout.xsp。
使用其他变量applicationScope.initialized
。检查applicationScope变量是否尚未在JavaScript中使用
if (!applicationScope.initialized) {
... initialize your applicationScope variables ...
applicationScope.initialized = "yes";
}