Как отключить управление версиями страниц в Apache Wicket 1.5? setVersioned(false) кажется недостаточно

Мне дали это старое веб-приложение Apache Wicket 1.5.

Все URL-адреса заканчиваются на ?xxx, где xxx — число. Кажется, это «функция» Wicket, которая позволяет вам версии/кешировать ранее показанные веб-страницы. Как бы красиво это ни звучало, с практической точки зрения это не более чем головная боль для всех вовлеченных пользователей, поскольку даже если базовые данные, отображаемые на странице, изменяются, и пользователь принудительно обновляет страницу, старая, устаревшая страница все равно перезагружается.

Я просматривал онлайн, и в документах Wicket это, кажется, упоминается как «управление версиями».

Я пытался отключить его, позвонив setVersioned(false), но это не помогло — я не вижу заметной разницы. Кто-нибудь знает, как заставить это работать?

Спасибо

На самом деле вы не хотите отключать это. Идентификатор страницы не связан с кэшированием. Для Wicket очень важно иметь дело с состоянием на стороне сервера. Пожалуйста, объясните, какую реальную проблему вы пытаетесь решить.

martin-g 08.04.2019 16:28

@marting-g Проблема в том, что у меня есть экран с данными. Пользователи нажимают кнопку «Обновить», ожидая увидеть обновленные данные, и они по-прежнему показывают вещи такими, какими они были, когда они впервые попали на страницу 10 минут назад.

devoured elysium 08.04.2019 16:38

Это означает, что приложение не использует модели Wicket должным образом. Погуглите "динамические и статические модели калитки". Об этом есть хорошая вики-страница.

martin-g 08.04.2019 19:27

Ах я вижу. Разве нет способа просто избежать того, чтобы калитка ставила? xxx на ссылки, которые она генерирует? Потому что кажется, что их удаление всегда заставляет калитку обновлять данные со страницы. Веб-приложение, которое мне дали, большое и находится в режиме обслуживания, толку от него особого нет, кроме как быстро исправить то тут, то там.

devoured elysium 08.04.2019 21:18

Один из способов избавиться от версии страницы в URL-адресах калитки — использовать ONE_PASS_RENDER в качестве стратегии рендеринга. Однако у этого есть довольно большие недостатки, и я бы не рекомендовал его. В конечном итоге вы можете больше сломать, чем починить. См. также stackoverflow.com/q/14585858

OH GOD SPIDERS 10.04.2019 10:32
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
382
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что ваше приложение кэширует данные в моделях. В терминологии 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, чтобы помочь вам определить причину, по которой Страница случайно получает состояние.

В вашем случае я не уверен, какое решение было бы проще - переработать модель (ы) или сделать страницу без гражданства. Обычно первое легче.

Другие вопросы по теме