2012-12-06 4 views
1

XPage에서 사용할 때 Java 디자인 요소에 문제가 있습니다. 그것은이하는 모든 버튼과 계산 필드 간단한 XPage를 넣어Xpages Java 요소에서 정적 메서드 사용

<?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를 생각해 보자. 계산 된 필드의 값은 정적 메서드 호출의 결과입니다.

자바 디자인 요소 코드는 다음과 같습니다

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가로드 될 때마다가 아니라 생성자가 한 번만 호출됩니다.

"휴식"할 수 있습니다. 정적 변수가 전체 응용 프로그램에 유효하기 때.에 정적 변수를 사용하여 세션 | 위 Bean을 관리합니다.