2012-12-06 48 views
1

在XPages中使用Java設計元素時遇到問題。在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類的前一個狀態會丟失。這似乎並非如此。

我不知道持續特性和限制 - 甚至不知道它們是否重要。任何人都可以解釋這一點嗎?

回答

2

靜態變量或類對於當前正在運行的應用程序的實例有效,並且只要應用程序未超時就存在。這就是爲什麼構造函數只被調用一次,而不是每次加載XPage的原因。

你可以「打破」f.e.由於靜態變量對整個應用程序是有效的,因此會話範圍的託管bean使用靜態變量。