2014-10-10 3 views
0

시간 제한과 함께 Spring을 사용하여 보안되는 GWT를 사용하는 웹 사이트가 있습니다 ... 한 시간을 들여 봅시다. 이 프로세스의 일부로 세션이 만료되기 5 분 전에 클라이언트 측 세션 시간 초과 경고를 구현하려고합니다.비동기 RPC가 만들어 질 때마다 GWT 메서드를 호출하는 방법

쿠키를 사용하는 Javascript를 작성했습니다. 타이머는 초기에 타이머를 설정하는 데 사용되며 기본 메서드를 통해 GWT에서 사용할 수있는 타이머를 다시 설정하는 메서드가 있습니다. 초기 타이머가 더 이상 비동기 호출의 어떤 종류를 사용 후 정확한 있도록 RPC가 서버에 대해 때마다

function resetSessionTimeout() { //update the cookie for the expected timeout 
    var date = new Date(); 
    var timeoutTime = 55 * 60 * 1000; 
    date.setTime(date.getTime() + timeoutTime); 
    createCookie('timeout', date.getTime(), 1); 
} 

, 서버 기반의 세션 타임 아웃은, 상쾌하지 않습니다. 위의 함수는 클라이언트 측을 올바른 시간 초과 시간으로 업데이트합니다.

확실하게 작동하는 옵션은 $wnd.resetSessionTimeout()에서 비동기 호출을 가진 모든 단일 메서드를 호출하는 네이티브 void를 호출하는 것입니다. 그러나이 방법은 많으며 확장 성이 좋지 않으며 구현이 잘못되었습니다.

RPC가 만들어지고 수신 될 때마다 관찰 할 클라이언트 부분을 설정 한 다음 각 메소드가 아니라 MVP 레벨 내에 기본 void를 넣을 수있는 방법이 있습니까? 즉 RPC 관찰자 또는 리스너? 이제 MyCallback 모든 AsyncCallback 객체를 대체 할 수

public class MyCallback<T> implements AsyncCallback<T> { 

    public MyCallback() { 
    } 

    @Override 
    public void onFailure(T result) { 
     /* 
     * Show standard error message. You can override it 
     * with a more specific message where necessary. 
     */ 
    } 

    @Override 
    public void onSuccess(T result) { 
     execute(result); 
     // Call your timer, etc. 
    } 

    protected void execute(T result) { 
     // Override this method when making calls. 
    } 
} 

:

답변

1

당신이 뭔가를 할 수 있습니다. 추가 보너스로 특정 오류 메시지를 원하지 않는 한 매번 onFailure를 재정의 할 필요가 없습니다.

+0

와우, 나는 그렇게 생각하지 않았다. onSuccess 대신 실행을 재정의하기 위해 모든 것을 다시 배선하는 데는 시간이 걸리지 만 처리가 크게 향상됩니다. 감사! 다른 대안은 생각합니다. 생성자에서 업데이트를 호출 한 다음 onFailure가 타이머를 재설정하도록하는 것입니다. – Compass

관련 문제