Калитка хочет сериализовать мою панель - PullRequest
2 голосов
/ 17 октября 2011

Когда я получаю доступ к определенной странице моего приложения Wicket, я получаю NotSerializableException:

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

Но я не могу объяснить, почему wicket должна попытаться сериализовать Panel . Есть идеи?

Не знаю, поможет ли это, но вот код, который я использую для добавления панели:

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());
        }
    });

1 Ответ

5 голосов
/ 17 октября 2011

Wicket сериализует многие вещи в сеанс как часть своего подхода к работе с кластеризацией.

Почти все в Wicket (в конце концов) распространяется на Component, которое реализует IClusterable, которое расширяет Serializable. Поэтому такие компоненты, как панели, созданные в Wicket, должны быть сериализуемыми.

Обычной практикой является создание LoadableDetachableModel классов, обертывающих ваши обычные бизнес-объекты логикой, которая хранит только ключ в сеансе и перезагружается с использованием этого ключа.

Если вы используете такие модели в качестве полей в своих компонентах вместо полных бизнес-объектов, вы будете значительно меньше загружать память сеанса.

...