Как избежать повторного выполнения последнего действия отправки формы при обновлении страницы? - PullRequest
8 голосов
/ 21 октября 2011

Я работаю над проектом, который разработан в JSF.Всякий раз, когда мы обновляем страницу JSF, последнее событие действия перезапускается.Например, когда я отправляю форму для удаления записи списка и обновления страницы результатов, тогда удаляется и другая запись из списка в той же позиции.Как это вызвано и как я могу решить это?

Я пытался в Face-config.xml, но это не решает мою проблему,

Чтобы получить более четкое представление о проблеме, с которой я сталкиваюсь,что я являюсь commandLink, чтобы удалить один ресурс из datatable, я использую атрибут actionlistener, который вызывает один метод в моем backingbean, поэтому проблема заключается в том, что когда я обновляю событие действия страницы, когда происходит событие, и выполняется метод, который удаляет другой ресурс из таблицы.Заранее спасибо

1 Ответ

19 голосов
/ 21 октября 2011

Симптомы указывают, что страница была запрошена запросом POST и что вы игнорируете предупреждение веб-браузера о том, что данные будут повторно отправлены при обновлении запроса.Обновление запроса POST, конечно, приведет к его повторному выполнению.Это не специфическая проблема JSF.

Распространенным решением является отправка перенаправления на запрос GET после выполнения запроса POST.Таким образом, клиент получит запрос GET в представлении браузера.Обновление этого параметра приведет к повторному выполнению запроса GET, который ничего не изменяет (не должен) (если вы не делаете это в конструкторе bean-объекта области действия запроса, связанного с представлением).Это также называется шаблоном POST-Redirect-GET .

В JSF 2.0 этого можно достичь, просто добавив параметр faces-redirect=true к результату действия компонента.

public String submit() {
    // ...

    return "viewid?faces-redirect=true";
}

Если вы все еще используете устаревшие <navigation-case> s в faces-config.xml, то тот же эффект может быть достигнут путем добавления <redirect/> к делу.

Единственный недостаток - это запросbean-объекты scoped обрабатываются таким образом (перенаправление в основном инструктирует веб-обозреватель создать новый запрос), и, таким образом, вы не можете передать данные в область запроса, чтобы повторно отобразить их на перенаправленной странице.Например, отображение сообщения об успехе.В JSF 2.0 вы могли бы вместо этого использовать для этого область флеш-памяти или просто разрешить POST путем <f:ajax> отправки вместо обычной отправки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...