Изменить содержимое компонента во время фазы рендеринга, когда загрузка его модели не удалась - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть компоненты виджета с простым наследованием разметки, например, так:

AbstractWidget

<wicket:panel>
    <wicket:child />

    <div wicket:enclosure="editButton" class="widget-edit-wrapper">
        <button wicket:id="editButton" type="button" class="widget-edit">
            <span class="glyphicon glyphicon-cog"></span>
        </button>
        <div style="display:none;">
            <div wicket:id="editPanel" class="widget-settings"></div>
        </div>
    </div>
</wicket:panel>

LabelWidget

<wicket:extend>
    <div wicket:id="container" class="label-widget flex-container">
        <div wicket:id="label"></div>
    </div>
</wicket:extend>

Теперь представьте, что содержимое метки взято из загружаемогоОтсоединяемая модель и загрузка модели создает исключение.

Мне нужно показать некоторую обратную связь пользователю об этом «сломанном» компоненте виджета.Есть ли способ заменить весь дочерний контент, когда загрузка его модели вызывает исключение?

Обратите внимание, что LabelWidget является лишь одним из многих дочерних элементов AbstractWidget, поэтому мне нужно решить эту проблему в AbstractWidget, а также мне нужно сохранить все элементы из компонента AbstractWidget.

1 Ответ

0 голосов
/ 26 февраля 2019

Вы можете сделать это, используя более умную модель - модель, которая делегирует исходную и пытается / ловит, если выдает исключение.В случае исключения вам нужно будет вернуть «пустой» объект модели, где «пустой» будет означать разные вещи для разных вариантов использования.

Ваша интеллектуальная модель может реализовать IComponentAssignedModel, чтобы она зналаComponent используется. Таким образом, в предложении catch вы можете сделать component.error("...")AbstractWidget вы должны добавить FeedbackPanel, который будет отображать сообщение об ошибке.Виджет специализации, такой как LabelWidget, будет отображаться как «пустой» (что бы это ни значило для него) с использованием резервной модели.

...