1

在 XPages 中使用 Java 设计元素时,我遇到了问题。

考虑以下简单的 XPage:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

    <xp:button value="Go" id="button1"></xp:button>
    <xp:br></xp:br>
    <xp:br></xp:br>
    <xp:br></xp:br>
    <xp:text escape="true" id="computedField1">
        <xp:this.value><![CDATA[#{javascript:importPackage(PACKAGE_NAME_REDACTED);
        TESTStatic.getValue();}]]></xp:this.value>
    </xp:text>
</xp:view>

它所做的只是建立一个带有按钮和计算域的简单 XPage。计算域的值是调用静态方法的结果。

Java 设计元素代码为:

package PACKAGE_NAME_REDACTED;

public class TESTStatic {

public static String value;

static {
    System.out.println("Running static initialiser");
    value = "fred";
}

public static String getValue() {
    return value;
}

}

我难以理解的是这个。调用 Xpage 时,静态初始化程序运行,您可以在服务器控制台日志中看到结果。但是,如果页面再次运行,静态初始化程序不会再次运行,这至少向我表明该类的状态已保持不变——这由保持不变的计算字段的值证实。好像放一会,Java类的状态好像被清除了,静态初始化器又运行起来了。

所以,我假设这个类一旦加载,在一定程度上是持久的。但是我们再次重新运行 Xpage,所以我预计 Java 类的先前状态会丢失。情况似乎并非如此。

我不知道持久性特征和限制——甚至不知道了解它们是否重要。其他人可以对此有所了解吗?

4

1 回答 1

2

静态变量或类对当前正在运行的应用程序的实例有效,并且只要应用程序未超时就存在。这就是为什么只调用一次构造函数,而不是每次加载 XPage 时。

您可以使用静态变量“破坏”会话范围的托管 bean,因为静态变量对整个应用程序有效。

于 2012-12-06T13:18:26.563 回答