2012-07-17 2 views
4

기본 인증 시스템을 구현할 수 있도록 Wicket의 WebSession을 서브 클래스하려고했습니다. 필자는 Wicket 참조 라이브러리의 지침을 따랐습니다. 내가 시간 동안 웹을 검색했습니다WebSession ClassCastException

java.lang.ClassCastException: org.apache.wicket.protocol.http.WebSession cannot be cast to com.example.webapp.AppSession 

와 내가 할 수있는 모든 노력을 : 여기

((AppSession)Session.get()).setUid() 

전체 오류입니다 : 내 웹 페이지에서 다음을 시도 할 때, 나는 ClassCastException를 얻을. 나는 정말로 약간의 도움에 감사 할 것이다. 또한이 작업을 수행하는 더 좋은 방법이 있는지 알려주십시오. 나는 개찰구를 처음 사용합니다.

감사합니다.

내가 너무 내 자신의 세션 클래스가 AppSession.java

public final class AppSession extends WebSession { 
    private Integer uid; 

    public AppSession(Request request) { 
     super(request); 
    } 

    public final Integer getUid() { 
     return uid; 
    } 

    public final void setUid(Integer uid) { 
     this.uid = uid; 
    } 

    public static AppSession get() { 
     return (AppSession)Session.get(); 
    } 
} 

App.java

public class App extends WebApplication { 
    public App() { 
     super(); 
     new AnnotatedMountScanner().scanPackage("com.example.webapp").mount(this); 
    } 

    @Override 
    public Session newSession(Request request, Response response) { 
     return new AppSession(request);  
    } 

    @Override 
    public Class getHomePage() { 
     return null; 
    } 
} 

답변

1

WebSession의 후손. 나는 너와는 몇 가지 일을한다. 당신이 대신 한 줄 호출의

AppSession ssnSession = AppSession.get(); 
ssnSession.setUid(...); 

을 시도 할 수도

/** 
* Gets the session for the calling thread. 
* @return 
* The session for the calling thread. 
*/ 
public static AppSession get() 
{ 
    return (AppSession)Session.get(); 
} 

:

AppSession 방법을 추가합니다.

(App) 세션 수업 패키지를 확인하셨습니까?

(나는 개인적으로 App.getHomePage()에 대한 null을 반환하지 않습니다.)

이 도움이 중 하나를합니까?

+0

여러 사용자와 AppSession의 수명에 문제가 있지 않습니까? – monksy

+0

@monksy 아니요. 'AppSession.get()'은 웹 요청이 처리되는 사용자 세션을 반환하기 때문입니다. –

+0

한 줄짜리 전화가 틀리지 않지만 정답입니다. 나는 항상 그것을 사용합니다 :) MySession.get(). getUsername() 등. – RobAu