Как отобразить трассировку стека в Wicket InternalErrorPage

#java #wicket

#java #wicket

Вопрос:

У меня есть обычай InternalErrorPage , который я ввел ApplicationSettings следующим образом:

 getApplicationSettings().setInternalErrorPage(InternalErrorPage.class);
getExceptionSettings().setUnexpectedExceptionDisplay(
  IExceptionSettings.SHOW_INTERNAL_ERROR_PAGE);
getRequestCycleSettings().setUnexpectedExceptionDisplay(
  IExceptionSettings.SHOW_INTERNAL_ERROR_PAGE);
  

Я хочу отобразить трассировки стека на этой странице (если я нахожусь в режиме разработки, конечно). Как я могу это сделать?

Комментарии:

1. Показывать трассировку стека (клиентам) в РАБОЧЕМ режиме — плохая практика безопасности. Вот почему Wicket не передает исключение на эту страницу.

2. да, я знаю, поэтому я написал только о режиме разработки

Ответ №1:

В Wicket 1.4 вы можете использовать

 getRequestCycle().onRuntimeException(new MyErrorPage(), theException);
  

Посмотрите на Wicket wiki и список рассылки для получения дополнительных объяснений.

В Wicket 1.5 исключение onRuntimeException было удалено. Вместо этого вы можете

«добавьте свой собственный org.apache.wicket.request.cycle.IRequestCycleListener (AbstractRequestCycleListener) с помощью org.apache.калитка.Application.getRequestCycleListeners().add() и реализовать его #onException(RequestCycle, исключение)» (цитируется здесь)

Комментарии:

1. итак, вы советуете поместить исключение в какую-то переменную сеанса? чтобы иметь возможность затем получить ее из сеанса и отобразить в InternalErrorPage.java класс? Я просто подумал — может быть, это уже сделано wicket itslef, и мне просто нужно это исключение на моей собственной странице

2. Нет, вы просто передаете исключение на свою собственную страницу ошибок. Если вы перешли по ссылкам, вы увидите, что именно так это делается в Wicket.