【问题标题】:Test to see if bean is instantiated?测试看看bean是否被实例化?
【发布时间】:2015-08-27 21:53:41
【问题描述】:

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

if (registrationBean == null){

错误是: 执行 JavaScript 动作表达式时出错 脚本解释器错误,line=2, col=22: [ReferenceError] 'registrationBean' not found

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

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

霍华德

【问题讨论】:

    标签: xpages


    【解决方案1】:

    使用 try/catch 块。如果出现错误,则为 null。

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

    【讨论】:

    • 是的,我认为我在做一些不现实的事情。甚至带有调试工具栏(仅此而已)的 XPage 也无法加载!然而,关于尝试/捕捉的好主意。如果没有实例化,bean 不应该为 null 吗?
    • 重点是,如果你尝试检查,对bean名称的引用将被传递给VariableResolver。我对随后发生的事情的理解是 faces-config 中的定义提供了到 Java 类的映射。因此,如果您引用 bean 名称,XPages (JSF?) 运行时会识别出您需要它,因此会尝试在相关范围内查找变量的现有实例,否则会延迟加载它。所以基本上,它不能为空,除非 NSF 的 XPages 运行时被搞砸了(就像这里发生的那样,你需要重建它来解决)。
    • @PaulStephenWithers 另一个选项是在构造函数中抛出异常
    • 会发生这种情况吗?我认为 bean 必须有一个空白的构造函数
    • 那么是的,如果构造函数的代码没有 try/catch 块,那可能是一个原因。
    【解决方案2】:

    首先,确保在 faces_config.xml 中设置了 bean(但似乎是这种情况)。那么你应该不能在实例化之前引用 bean...

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

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

    /约翰

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      • 2012-02-08
      • 2019-04-06
      • 2011-03-18
      • 2019-10-25
      • 1970-01-01
      相关资源
      最近更新 更多