2015-08-27 29 views
0

我想使用SSJS来测试会话作用域bean是否事实上在beforePageLoad事件中有效。如果使用“调试”工具栏清除会话范围,则在尝试测试bean以查看它是否为空时会出错。测试以查看bean是否被实例化?

如果(registrationBean == NULL){

错误是: 错误而执行JavaScript动作表达 脚本解释器误差,线= 2,COL = 22:[的ReferenceError] 'registrationBean' 未找到

问题是如何测试bean以查看它是否被实例化?如果没有,那么我想转到另一个XPage(重定向),以允许用户输入用于填充bean的值。

或者,这是否只是一个问题,因为我使用调试工具栏清除所有会话和应用程序范围?

Howard

回答

1

使用try/catch块。如果你得到错误,它是空的。

我怀疑这只是一个问题,因为applicationScope已被清除。通常,第一次引用变量的尝试会实例化对象。但是,清除整个applicationScope可能会破坏应用程序中的很多XPage代码,应该避免。

+0

是的,我想我正在做一些不现实的事情。甚至XPage上的调试工具栏(也就是这样)不会加载!然而,尝试/抓住好主意。如果没有实例化,bean不应该为null吗? – Howard

+2

问题是,如果您尝试检查,则对bean名称的引用将传递给VariableResolver。我对当时会发生什么的理解是,faces-config中的定义给出了Java类的映射。因此,如果您引用bean名称,那么XPages(JSF?)运行时会标识出您想要的名称,因此会尝试在相关作用域中查找该变量的现有实例,否则懒加载它。所以基本上,它不能为null,除非NSF的XPages运行时被破坏(就像这里发生的那样,你需要重建它来解决)。 –

+0

@PaulStephenWhathers另一种选择是在构造函数 –

1

首先,确保bean在faces_config.xml中设置(但似乎是这种情况)。然后,在实例化之前,您应该无法引用bean ...

查看bean何时实例化的简单方法是将System.out.println(“....”)放入豆的构造函数。这应该会使你走上正轨。你可以(应该!)使用OpenNTF LogReader来看看发生了什么 - 这会显示页面和bean引发的任何错误。

然后当然通过调试工具栏清除所有数据可能会使系统处于“未知”状态 - 您应该尝试随后重新加载页面,以确保它是明确的/实例化的。

/约翰

相关问题