обработка исключений для панелей калитки? - PullRequest
1 голос
/ 21 мая 2011

Я добавил обработку исключений для страниц, теперь я хочу сделать это для панелей.

Я нашел http://apache -wicket.1842946.n4.nabble.com / ExceptionHandling-in-Panels-td3311271.html и http://apache -wicket.1842946.n4.nabble. com / newbie-best-practice-for-not-render-component-td1871632.html , но ответы не удовлетворяют, так как я понял, что в Wicket нет встроенной поддержки для обработки исключений для панелей, так как для страниц. И выбор между фрагментом с разметкой панели и фрагментом ошибки не является надежной поддержкой, которую я ищу. Поскольку большинство исключений в моем веб-приложении могут возникать в той части логики, в которой добавляются компоненты и используются модели, я подумал о том, чтобы поместить эту часть логики в конструктор, чтобы при возникновении ошибки я мог ее отловить. а затем покажите панель ошибок, которую я хочу. Что-то вроде:

try{
  add(new MyPanel(panelId, model));
}catch (Exception e){
  add(new ErrorPanel(panelId, e));
  ... 
}

Но я получаю предупреждения при разрешении свойств в конструкторе с помощью метода getString ().

Итак, мои вопросы:
- Есть ли онлайн-пример, где это было решено? Или есть идеи по этому поводу?
- Если использование getString () в конструкторе генерирует этот тип предупреждений, что тогда будет лучше?
- Я не могу поместить эту логику в конструктор, потому что вы не должны разрешать свойства там, какие есть варианты, кроме упомянутой мною?

Ответы [ 2 ]

2 голосов
/ 21 мая 2011

Как и в большинстве логик на панелях, конструктор не лучшее место. Во время создания панель (или любой другой компонент) еще не прикреплена к странице. Это оставляет компонент в хрупком состоянии, где некоторые компоненты даже не имеют разметки. Более сложная логика должна быть размещена вне конструктора. Wicket 1.5 предлагает метод onInitialRender, который можно переопределить, где можно смело использовать любую логику. В Wicket 1.4.x есть простой способ смоделировать этот хук, реализуя onBeforeRender как

@Override
protected void onBeforeRender() {
    if (!hasBeenRendered()) {
        onInitialRender();
    }
    super.onBeforeRender();
}

, таким образом, создавая ловушку onInitialRender, которая выполняется только один раз, и IMO - лучшее место для размещения любой логики, не зависящей от других ловушек.

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

1 голос
/ 29 марта 2012

Примечание. Wicket 1.5 не предлагает метод onInitialRender (возможно, он был добавлен и удален во время некоторых предварительных выпусков). Вместо этого метод onInitialize должен использоваться для добавления дочерних компонентов на панель (или любой другой компонент).

Подробнее см. https://cwiki.apache.org/WICKET/migration-to-wicket-15.html#MigrationtoWicket1.5-ComponentInitializationComponent%2523onInitialize.

...