как заставить страницу ошибки (http 500) работать в IceFaces?

При использовании 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.


person ymajoros    schedule 24.03.2011    source источник


Ответы (1)


Основная проблема заключается в том, что Icefaces захватывает кнопку отправки и помещает в нее ajax. Я думаю, что это просто плохое поведение: я понимаю, что что-то подобное может произойти в ice:commandButton или даже под ice:form, но это происходит и с h:commandButton с h:form. Это можно отключить в соответствии с http://wiki.icefaces.org/display/ICE/Configuration<. /a> , установив для параметра контекста авторендеринга значение 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 отображает всплывающее окно с ошибкой, чего не произошло.

person ymajoros    schedule 24.03.2011