2011-10-16 19 views
2

,我得到一個NotSerializableException:檢票希望當我進入我的Wicket應用程序的特定頁面連載我的面板

java.io.NotSerializableException: my.package.MyPanel$1 

但我無法解釋爲什麼檢票應儘量序列化面板。任何想法?

我不知道是否有幫助,但這裏是我用添加面板代碼:

final User profileUser = ...; 
final IModel<User> loggedInUser = ...; 
add(new MyPanel("panelid", new Model<MyObject>(new MyObject())) 
    { 
     @Override 
     public boolean isVisible() 
     { 
      return profileUser != null && profileUser.equals(loggedInUser.getObject()); 
     } 
    }); 

回答

5

檢票連載很多事情到了本屆會議的辦法來處理集羣的一部分。

幾乎所有在Wicket(最終)延伸Component其實施IClusterable其中延伸Serializable。因此,在Wicket中創建的面板等組件需要可序列化。

通常的做法是創建LoadableDetachableModel類,用正常業務對象的邏輯來存儲只有會話中的密鑰並使用該密鑰重新加載。

如果您在組件中使用這些模型而不是整個業務對象中的字段,則會使會話內存大大減少。

+0

謝謝,但這是什麼意思?我應該用一個LoadableDetachableModel來包裝MyPanel嗎? –

+0

不可以。一個面板應該可以序列化而不被包裝。但是它或者它所定義的類包含了不可序列化的東西,可能是一個應該被包裝的業務對象。我不得不看到更多的代碼,也許不可序列化的消息確定是什麼。 –

+0

對不起,發現了問題。在MyPanel中,我有一個不是Serializable的實例變量。我無法看到它,因爲我打開了錯誤的文件(可能有點太晚了:-)無論如何:謝謝你的出色答案 –

相關問題