У меня есть веб-приложение Facelets (JSF 1.2 (myfaces)), и я хочу настроить свою страницу с ошибкой - что, казалось бы, было естественным делом, когда приложение созревает. Я очень запутался в процессе.
Я обнаружил следующее:
Я не нашел способ настроить страницу ошибок Facelets. Я не нашел, где находится шаблон. Я нашел решения с переопределением ViewHandler, который выполнял бы sendRedirect (). Я считаю, что этого можно добиться без написания кода, особенно ViewHandler.
Я нашел способ отключить обработку ошибок Facelets и использовать один myFaces:
код:
<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.ERROR_HANDLING</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.ERROR_TEMPLATE_RESOURCE</param-name>
<param-value>/pages/public/errorPage.jsf</param-value>
</context-param>
К сожалению, я не могу заставить myFaces найти страницу JSF. Мне нужно использовать страницу jsf, потому что я хочу использовать макет сайта, который фрагментирован по нескольким шаблонам. Источник: http://wiki.apache.org/myfaces/Handling_Server_Errors
- Я попробовал решение для томагавка:
web.xml:
<context-param>
<param-name>org.apache.myfaces.ERROR_HANDLING</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.ERROR_HANDLER</param-name>
<param-value>org.apache.myfaces.tomahawk.util.ErrorRedirectJSFPageHandler</param-value>
</context-param>
Faces-config.xml:
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>java.lang.Throwable</from-outcome>
<to-view-id>/pages/public/errorPage.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
Источник: http://wiki.apache.org/myfaces/Handling_Server_Errors
- Я обнаружил, что могу использовать обработку ошибок контейнера через
<error-page>
вweb.xml
. Я успешно перенаправлен на страницу ошибки jsf. Проблема здесь в том, что я не могу отобразить исключение - не знаю как.
Обновление: я узнал, как - с помощью ManagedBean:
public class ErrorDisplayBean {
public String getStackTrace() {
FacesContext context = FacesContext.getCurrentInstance();
Map requestMap = context.getExternalContext().getRequestMap();
Throwable ex = (Throwable) requestMap.get("javax.servlet.error.exception");
...
}
}
см. остальную часть кода http://wiki.apache.org/myfaces/Handling_Server_Errors.
Чего я хочу достичь: я хочу использовать механизм обработки ошибок Facelets без написания кода и иметь возможность отображать исключение на странице jsf. Если это невозможно, я хотел бы снова использовать обработку ошибок myFaces с отображением в исключении. Я думаю, что одно из них должно быть возможным.