Кнопка отправки JSF - форма отправляется X раз в течение одной секунды (до повторного создания представления) - как это предотвратить? - PullRequest
0 голосов
/ 02 сентября 2011

У меня проблема, когда я отправляю форму (нажатием клавиши ENTER или щелчком мыши) - если я нажимаю ее x раз быстрее, быстрее, чем фактический вид воссоздается (например, десять раз в секунду), данные формы отправляются десять раз и десять раз сохраняются в базе данных.

И не важно, есть ли какая-либо проверка, например, убедитесь, что данные могут быть сохранены только один раз.

Следующая отправка после обновления представления работает нормально. Данные не сохраняются, потому что теперь работает валидатор ..

Итак, недоброжелательный пользователь заполняет форму и вместо обычной отправки он быстро нажимает кнопку отправки, пока представление не будет восстановлено, и у меня в базе данных будет X записей вместо одной: -)

Как я могу предотвратить это странное поведение?

Как запретить нажимать кнопку подтверждения, пока представление не будет перестроено?

Ответы [ 2 ]

1 голос
/ 03 сентября 2011

Возможно, вы захотите добавить что-то вроде DoubleClickFilter к вашему web.xml. Другой способ - работать с Tokens, который вы проверяете каждый запрос и становитесь недействительным после первого запроса, так что последующие запросы не проходят проверку.

1 голос
/ 03 сентября 2011

РЕШЕНИЕ:

//Initialize our submit flag to false
var formSubmitted = false;

/**
 * Prevent from submitting a form more than once
 * @returns {Boolean}
 */
function submitForm()
{   
  //has the form been submitted before?
  if( formSubmitted == true )
  {
     alert("This form has already been submitted!");
     return false;
  }
  formSubmitted = true;

  return true; // Submit form
}

и кнопка отправки:

<h:commandButton ... action="#{bean.action}" onclick="return submitForm();"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...