Браузер показывает устаревшую страницу JSP, пользователь должен обновить вручную - PullRequest
0 голосов
/ 11 октября 2011

Я работаю над сайтом в JSP. Существует страница под названием «Агентство», которая является общедоступной и содержит подробную информацию об агентстве. Однако, когда «Администратор агентства» вошел в систему, та же страница Агентства отображается со ссылками «Добавить / Редактировать» для изменения данных на странице.

Проблема заключается в следующем:

  • Пользователь заходит на страницу агентства (на данный момент не авторизован)

  • Этот пользователь входит в систему как администратор агентства и снова переходит на страницу агентства

  • На странице агентства не отображаются ссылки Добавить / Изменить, пока пользователь не обновит браузер вручную

Вот так выглядит ссылка на страницу агентства:

<a href="agency.do?agencyId=<core:out value="${agency.agencyId}" />">
    <core:out value="${agency.name}" />
</a>

Я использовал это в качестве обходного пути:

<a href="javascript:void(0)" onclick="javascript:window.location = 'home.do?agencyId=<core:out value="${agency.agencyId}" />&rnd=' + Math.random()">
    <core:out value="${agency.name}" />
</a>

Я добавляю случайное число к URL с помощью JavaScript. Но использование onclick вместо href не кажется правильным. Что если пользователь захочет открыть ссылку в новой вкладке?

Я думал, что это будет довольно распространенная проблема. Есть ли лучшее решение для этого?

1 Ответ

3 голосов
/ 11 октября 2011

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

response.setDateHeader("Expires", 0);
response.setHeader("Cache-control", "no-store, no-cache, must-revalidate");
response.setHeader("Pragma", "no-cache");

Относительно использования JSTL, у меня было бы два замечания:

  1. Обычный префикс для базовой библиотеки: c, а не core.
  2. URL-адрес должен быть составлен с использованием тега <c:url>. Этот тег заботится о

    • взятие абсолютных URL (начиная с /) и предварительное ожидание корневого контекста приложения (/agency.do становится /myApp/agency.do)
    • добавление идентификатора сеанса в URL, если необходимо перезапись URL
    • правильное кодирование параметров URL

Например:

<c:url var="agencyUrl" value="agency.do">
    <c:param name="agencyId" value="${agency.agencyId}" />
</c:url>
<a href="${fn:escapeXml(agencyUrl)}"><c:out value="${agency.name}" /></a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...