Калитка: Как удалить или пропустить страницу в карте? - PullRequest
2 голосов
/ 13 ноября 2011

Есть ли в калитке 1.4 способ «пропустить» страницу в карте страницы, когда пользователь перемещается с помощью кнопок «Назад» и «Вперед»?

Простое удаление страницы из карты страниц создает исключение: org.apache.wicket.protocol.http.PageExpiredException: не удается найти отображаемую страницу в сеансе [pagemap = null, componentPath = 3, versionNumber = 0]

Вот мой пример использования: У меня есть страница создания отчета. Пользователь нажимает кнопку для подтверждения отчета и перенаправляется на ожидающую отчет страницу, на которой отображается ход процесса отчета до тех пор, пока фактический отчет не будет сгенерирован заново. Затем пользователь перенаправляется на страницу отчета.

страница создания отчета -> ожидающая отчета страница -> страница результатов отчета.

Как только отчет сгенерирован, я не хочу, чтобы пользователь мог переходить назад (и пересылать) на страницу отчета. Я попытался перейти на «страницу создания отчета», когда пользователь перешел на страницу отчета. Ниже в onBeforeRender () ожидающей страницы отчета.

@Override
public void onBeforeRender() {

    if (!reportPending && previousPage != null) 
    {
        RequestCycle.get().setRedirect(true);
        RequestCycle.get().setResponsePage(previousPage);
    } 

    super.onBeforeRender();
}

В I.E. все работает нормально, но затем я получаю «страницу создания отчета», отображаемую дважды, когда пользователь возвращается дважды. страница результатов отчета - (назад) -> страница создания отчета - (назад) ->) страница создания отчета. Не идеально.

В Firefox каждый раз, когда я нажимаю кнопку «Назад», я бесконечно получаю «страницу создания отчета». По сути, это означает, что кнопка «Назад» бесконечно указывает на ожидающую отчет страницу.

Есть ли способ удалить отчет, ожидающий рассмотрения, из истории просмотров (страницы) без исключения? Любое понимание приветствуется. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 09 февраля 2013

Очень простая подходящая концепция, не относящаяся к Wicket, - возвращать содержимое результата с точно таким же URL-адресом, что и URL-адрес перед ним, то есть с первой страницы, которую вы не хотите показывать с помощью кнопки «Назад». Это может быть сделано с или без перенаправления ответа. В обоих случаях запись истории браузера не создается, и не нужно угадывать, какую страницу показывать на кнопке возврата.

В калитке используйте смонтированную страницу с setVersioned(false). Страница содержит изначально панель создания. В результате создания отчета панель создания заменяется панелью отчета. Метод замены панели позволяет избежать создания двух страниц.

Хотя есть осложнение. Вам нужен маппер, который вообще не создает строку версии, которая в основном поддерживает директиву setVersioned(). Поддержка / реализация этого не существует "из коробки" в версиях 1.4 ... 6.5. Без него всегда есть две страницы, одна начальная без версии в ее URL, а другая с чем-то вроде ?0 в качестве строки версии.

1 голос
/ 13 ноября 2011

То, что вы могли бы попробовать - я сам этого не сделал - это добавить RestartResponseException в ваше onBeforeRender переопределение.Тогда возникает проблема, какую страницу показывать: пользователь возвращается на страницу создания отчета или переходит на страницу загрузки?Вы можете посмотреть на последнюю отображаемую страницу на карте страницы, но это неизбежно раздражает пользователей, если вы не можете заставить ее работать идеально.

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

...