加载模型失败时在渲染阶段更改组件的内容

时间:2019-02-26 10:05:59

标签: wicket

我有一个具有简单标记继承的小部件组件,像这样

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 :(得分:0)

您可以使用更智能的模型来完成此任务,该模型可以委派给原始模型,并在引发异常时尝试/捕捉。如果发生异常,您将需要返回一个“空”模型对象,其中“空”对于您的不同用例将具有不同的含义。

您的智能模型可以实现IComponentAssignedModel,以便知道它所使用的Component。通过这种方式,您可以在catch子句中使用component.error("...")。在AbstractWidget中,您应该添加一个FeedbackPanel来呈现错误消息。像LabelWidget这样的特殊化小部件将通过使用后备模型呈现为“空”(无论这意味着什么)。