Шов: метка токена не соблюдается - PullRequest
1 голос
/ 23 мая 2010

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

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

Вот соответствующий код: Есть идеи?

<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>

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

  • Я унаследовал это, поэтому я стараюсь изменить это как можно меньше. (Используется в нескольких местах.)
  • Каждое действие возвращает представление, а не нуль. Я подтвердил это, переходя от строки к строке.
  • В моем текущем тестовом примере reRenderList пуст.
  • onActivationComplete также пусто.

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

1 Ответ

2 голосов
/ 23 мая 2010

Предполагается, что s:token позволяет избежать двойной / множественной отправки, нетерпеливо нажимая кнопку отправки несколько раз в одном и том же запросе, или обновляя не перенаправленный результат в веб-браузере, или повторно отправляя страницу cached в истории браузера.

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

...