2010-05-22 5 views
1

Когда я нажимаю кнопку управления, а затем нажмите браузер кнопку назад в форму и нажмите на него еще раз, она представляет во второй раз, не бросать надлежащее исключение ...Шов: маркер тега не соблюдается

Даже незнакомец, сам идентификатор формы РАЗЛИЧИЙ, когда я возвращаюсь, что означает, что он восстановил «действительный» идентификатор формы в какой-то момент.

Вот код: Любые идеи?

<h:form id="accountActivationForm"> 
    <s:token/> 
    <a4j:commandButton id="cancelActivateAccountButton" 
     action="#{controller[cancelAction]}" 
    image="/images/button-Cancel-gray.gif" 
     reRender="#{reRenderList}" 
     oncomplete="#{onCancelComplete}" /> 
     &#160; 
    <a4j:commandButton id="activateAccountButton" 
     action="#{controller[agreeAction]}" 
     image="/images/button-i-agree-continue.gif" 
     styleClass="activate-account-button" 
     reRender="#{reRenderList}" 
     oncomplete="#{onActivationComplete}"/> 
</h:form> 

Разъяснения:

  • Я унаследовал это, так что я пытаюсь изменить его как можно меньше. (Он используется в нескольких местах.)
  • Каждое действие возвращает вид, а не null. Я подтвердил это, шаг за шагом по очереди.
  • ReRenderList пуст в моем текущем чехле.
  • onActivationComplete также пуст.

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

ответ

2

The s:token должен избегать двойных/множественным ПРЕДСТАВЛЯЕТ по нетерпеливо нажав кнопку отправки несколько раз в одном запросе или обновлении не-перенаправлены результат в WebBrowser или повторной страницы кэшируются в истории браузера.

Что он работает, когда клиент перемещается вперед и назад по истории браузера, это означает, что страницы с формами не кэшируются в истории браузера клиента и запрашиваются как новые с серверной стороны. Это действительно вернет новый токен. Проверьте это с помощью HTTP-трекера, такого как Firebug.

+0

ОК, так почему он перезагружается, когда я нажимаю кнопку «Назад»? Каков наилучший способ предотвратить повторное представление формы (поскольку это не та же форма)? –

+1

Кнопка «Назад» повторно выполнит запрос, если он не был кэширован браузером. То есть запрос имеет по крайней мере 'Cache-Control: no-cache',' Pragma: no-cache' и 'Expires: 0' в заголовках ответов. – BalusC

Смежные вопросы