JSF двойное представление данных формы - PullRequest
3 голосов
/ 14 ноября 2011

Мне часто трудно воспроизвести ошибку моего jsf-приложения (Mojarra 2.1 на Glassfish 3.0.1 с Primefaces 2.1, SSL).У меня есть подозрение, что это может быть связано с двойной или многократной отправкой одной и той же формы, например, когда пользователь дважды щелкает кнопку отправки.

Симптомами этой ошибки являются то, что сервер прерывает передачуФайлы ресурсов (javascript, css) и страница будут выглядеть странно (отсутствует css) или не будут работать должным образом (отсутствует js).

Я не уверен, что это единственная причина.Это трудно понять, так как ошибка возникает очень редко.

Есть ли способ предотвратить многократную отправку одной и той же формы?Решение Javascript сделает это.Но, может быть, есть решение на стороне сервера, может быть, конкретная конфигурация jsf?

1 Ответ

2 голосов
/ 15 ноября 2011

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

Вы можете использовать функцию jsf.ajax.addOnEvent, чтобы получить глобальную перехватку запросов ajax. Вот пример начала:

jsf.ajax.addOnEvent(function(data) {
    if (data.source.type != "submit") {
        return;
    }

    switch (data.status) {
        case "begin":
            data.source.disabled = true;
            break;
        case "complete":
            data.source.disabled = false;
            break;
    }    
});
...