2013-07-04 5 views
2

몇 페이지에서 사용자 입력을 처리하고 데이터를 처리 한 다음 마지막으로 입력 요약을 제공하는 페이지를 보여주는 Wicket (6.9.0) 응용 프로그램이 있습니다. 응용 프로그램은 일부 데이터를 세션에 저장하므로 마지막에 무효화하여 사용자가 부실 세션 데이터로 계속 돌아갈 수 없도록하고 싶습니다.Wicket 세션을 무효화하는 방법

session.invalidate()를 생성자의 첫 번째 요약 페이지에서 사용한 다음 onAfterRender()에서 사용하려고했지만 두 번 모두 요약 페이지의 출력이 아닌 "페이지 만료 됨"페이지를 보았습니다.

내 요약 페이지를 표시 한 다음 내 세션을 무효화 할 방법이 있습니까? 아니면 개찰판에서하지 말아야 할 것이 있습니까?

+0

session.invalidate()는 현재 페이지 렌더링을 제동하지 않습니다. 페이지 참조가 무효화되거나 지연로드 된 데이터 (예 : 최대 절전 모드) 또는 NPE 등등의 다른 종류의 문제 일 수 있습니다. 코드 스 니펫을 제공 할 수 있습니까? –

+0

생성자는 페이지에 일부 레이블을 추가하는 경우를 제외하고는 아무 작업도 수행하지 않습니다. 데이터는 Java bean으로 제공되므로 클래스 자체 외부와는 아무런 상호 작용이 없습니다. –

답변

2

"페이지 만료"문제는 프레임 워크의 렌더링 전략으로 인해 발생합니다. 기본적으로 Wicket은 페이지를 렌더링하기 위해 redirect-after-post 전략을 사용합니다. 따라서 세션이 페이지 어딘가에서 무효화되면 다음 get-request는 세션이 더 이상 존재하지 않기 때문에 항상 "Page Expired"메시지를 표시합니다.

간단한 솔루션은 응용 프로그램 초기화 방법의 렌더링 전략을 변경하는 것입니다

@Override 
protected void init() { 
    super.init(); 
    getRequestCycleSettings().setRenderStrategy(RenderStrategy.ONE_PASS_RENDER); 
} 

이 솔루션의 단점은 사용자가 새로 고침 버튼을 누르면는 '이중 제출 문제'을 앓고 있다는 것입니다 그들의 브라우저.

+1

기본 렌더링 전략을 사용할 수있는 또 다른 솔루션 : 마지막 페이지에 AjaxLazyLoadPanel을 포함하고 getLazyLoadComponent() 메소드 내에서 세션을 무효화하십시오. 내 응용 프로그램의 나머지 부분에 영향을 미치지 않기 때문에 이것은 ONE_PASS_RENDER 전략으로 변경하는 것이 더 좋다고 생각합니다. –

1

onAfterRender의 생성자에서 세션을 무효화하면 페이지가 표시되기 전에 페이지가 만료 된 페이지가 표시됩니다.

당신 수 :

  • 한 장소 요약 페이지와는 모든 세션 데이터 요약 페이지 널의 생성자에서 세션
  • 무효 클릭 한 후 버튼
  • 당신이 세션을 무효화 할 수 onRemove에서, 그러나 만약 당신이 거기에 도착할 것입니다 모르겠다
  • 또는 다시 버튼을 해제하고 다음과 같은 것을보고 싶다 : http://blog.55minutes.com/2011/10/how-to-defeat-the-browser-back-button-cache/
+0

로버트 제안에 감사드립니다. onAfterRender() 이후 세션에 대한 참조가 있다는 것이 이상하게 보입니다. 여하튼 Wicket은 페이지를 렌더링 한 후에도 여전히 그것을 필요로합니다. –