как заставить страницу ошибки (http 500) работать в IceFaces? - PullRequest
2 голосов
/ 24 марта 2011

При использовании Icefaces 2, если при выполнении метода действия на стандартном (= не icefaces) h возникает ошибка: commandButton, кажется, что кнопка не имеет действия. Страница ошибок не отображается, хотя она настроена для этого в web.xml.

Я могу заставить его работать, окружив тег

<f:ajax disabled="true">...</f:ajax>

Но я бы хотел либо отключить этот автоматический ajax от Icefaces (см. Вопрос Как отключить незапрашиваемый ajax на стандартных компонентах (h: commandButton) при использовании Icefaces? ), либо заставить страницу ошибок работать в любом случае.

Реализация JSF - Mojarra 2.1, которая поставляется с Glassfish 3.1.

1 Ответ

1 голос
/ 24 марта 2011

Основная проблема заключается в том, что Icefaces захватывает кнопку отправки и помещает в нее ajax.Я думаю, что это просто плохое поведение: я понимаю, что что-то подобное может произойти во льду: commandButton или даже под ice: form, но это случается и с h: commandButton для h: form.Это можно отключить, согласно http://wiki.icefaces.org/display/ICE/Configuration, установив для параметра контекста autorender значение false в web.xml.Но тогда вам нужно явно включить это поведение в каждой форме icefaces (в противном случае вы получите ошибку).

В любом случае, как указано здесь: http://wiki.icefaces.org/display/ICE/Handling+Exceptions, размещение этого скрипта на странице в основном решает проблему:

                //Assign your error handling function to a variable
                var iceErrorCallback = function iceHandleError(statusCode, responseTxt, responseDOM) {
                    //Handle all errors by simply redirecting to an error page
                    window.location.href = "./generalError.xhtml";
                }

                //Safely check if ICEfaces is available
                if (ice) {
                    //Turn off the popups as we plan to handle this ourselves
                    ice.configuration.disableDefaultIndicators = true;

                    //Register your error handler as a callback
                    ice.onServerError(iceErrorCallback);
                }

Обновление: я должен был исправить несколько javascript Icefaces для его работы, см. http://jira.icefaces.org/browse/ICE-6546.Я знаю, что нормальное поведение Icefaces отображает всплывающее окно с ошибкой, которая не произошла.

...