Мне дали это старое веб-приложение Apache Wicket 1.5.
Все URL-адреса заканчиваются на ?xxx
, где xxx
— число. Кажется, это «функция» Wicket, которая позволяет вам версии/кешировать ранее показанные веб-страницы. Как бы красиво это ни звучало, с практической точки зрения это не более чем головная боль для всех вовлеченных пользователей, поскольку даже если базовые данные, отображаемые на странице, изменяются, и пользователь принудительно обновляет страницу, старая, устаревшая страница все равно перезагружается.
Я просматривал онлайн, и в документах Wicket это, кажется, упоминается как «управление версиями».
Я пытался отключить его, позвонив setVersioned(false)
, но это не помогло — я не вижу заметной разницы. Кто-нибудь знает, как заставить это работать?
Спасибо
@marting-g Проблема в том, что у меня есть экран с данными. Пользователи нажимают кнопку «Обновить», ожидая увидеть обновленные данные, и они по-прежнему показывают вещи такими, какими они были, когда они впервые попали на страницу 10 минут назад.
Это означает, что приложение не использует модели Wicket должным образом. Погуглите "динамические и статические модели калитки". Об этом есть хорошая вики-страница.
Ах я вижу. Разве нет способа просто избежать того, чтобы калитка ставила? xxx на ссылки, которые она генерирует? Потому что кажется, что их удаление всегда заставляет калитку обновлять данные со страницы. Веб-приложение, которое мне дали, большое и находится в режиме обслуживания, толку от него особого нет, кроме как быстро исправить то тут, то там.
Один из способов избавиться от версии страницы в URL-адресах калитки — использовать ONE_PASS_RENDER в качестве стратегии рендеринга. Однако у этого есть довольно большие недостатки, и я бы не рекомендовал его. В конечном итоге вы можете больше сломать, чем починить. См. также stackoverflow.com/q/14585858
Проблема в том, что ваше приложение кэширует данные в моделях. В терминологии Wicket это называется static
моделью.
Например:
Person person123 = personService.get(123);
// a static model
page.add(new Label("personMood", new Model(person123.getMood())));
Здесь метка всегда будет показывать настроение человека в момент создания экземпляра метки. Человек может изменить свое настроение в следующую секунду, но метка по-прежнему будет показывать старое/кэшированное значение.
// a dynamic model
page.add(new Label("personMood", new Model<String>() {
@Override public String getObject() {
return person123.getMood();
}
}));
здесь ярлык будет отображать настроение ток человека при каждом отображении этого ярлыка/страницы.
Идентификатор страницы в URL-адресе сообщает Wicket, какую страницу состояние следует искать и загружать из хранилища страниц. Только страницы с состоянием имеют такой идентификатор. Если вы хотите избавиться от этого, вам следует использовать на своей странице только компоненты и поведения без сохранения состояния. Существует модуль wicket-devutils
, который предоставляет StatelessChecker
, чтобы помочь вам определить причину, по которой Страница случайно получает состояние.
В вашем случае я не уверен, какое решение было бы проще - переработать модель (ы) или сделать страницу без гражданства. Обычно первое легче.
На самом деле вы не хотите отключать это. Идентификатор страницы не связан с кэшированием. Для Wicket очень важно иметь дело с состоянием на стороне сервера. Пожалуйста, объясните, какую реальную проблему вы пытаетесь решить.