2012-07-17 27 views
4

我一直試圖將Wicket的WebSession子類化,所以我可以實現一個基本的身份驗證系統。我遵循Wicket參考庫中的指導原則。當我嘗試在我的網頁下面,我得到一個ClassCastException:WebSession ClassCastException

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

以下是完整的錯誤:

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

我一直在尋找了幾個小時的網,並試圖盡我所能。我真的很感謝一些幫助。另外,請讓我知道是否有更好的方法來做到這一點。我對門票很陌生。

謝謝。

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方法:

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

你可能想嘗試

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

,而不是你一個線路上的呼叫。

您是否檢查過您的(App)Session類的包?

(我個人不返回nullApp.getHomePage()

是否有任何的幫助呢?

+0

這對於多個用戶和AppSession的使用壽命來說不是問題嗎? – monksy 2013-09-24 21:50:25

+0

@monksy不,因爲'AppSession.get()'返回正在處理Web請求的用戶的會話。 – 2013-10-01 10:04:33

+0

這是正確的答案,儘管單線電話沒有錯。我一直使用它:) MySession.get()。getUsername()等 – RobAu 2013-10-16 06:59:37