Model 创建自定义组件模型(TimerPanel)

Model 创建自定义组件模型(TimerPanel),model,wicket,custom-component,Model,Wicket,Custom Component,这个问题是关于好的导叶设计的。我们有几种方法可以实现它,但是我们想知道如何更好地设计它。我们只想构建一个简单的计时器面板,带有标签和计时器(某种秒表) 我们应该如何设计它的模型。当然,我们需要IModel timerUntil。但是我们如何在TimerPanel中定义标签的文本呢 TimerPanel将在父面板中使用。ParentPanel的模型如下所示: public class ParentDto { private LocalDateTime timerAValidUntil; p

这个问题是关于好的导叶设计的。我们有几种方法可以实现它,但是我们想知道如何更好地设计它。我们只想构建一个简单的计时器面板,带有标签和计时器(某种秒表)

我们应该如何设计它的模型。当然,我们需要
IModel timerUntil
。但是我们如何在TimerPanel中定义标签的文本呢

TimerPanel将在父面板中使用。ParentPanel的模型如下所示:

public class ParentDto {
  private LocalDateTime timerAValidUntil;
  private LocalDateTime timerBValidUntil;
}
由于ParentDto没有关于TimerPanel标签的任何信息,因此

new PropertyModel(getDefaultModel(), "timerAValidUntil")
这还不够

这里的问题是:我们是否应该为
TimerPanel
中的标签定义一个固定的wicketId,比如说
timerLabel
,父面板必须在其
Panel.properties.xml
中定义它?。如(选项A)

还是最好创建一个新的ModelObject,如(选项B)

公共类TimerDto(){
字符串时间标签;
IModel TIMERVALIDULL;
}

我们总是尝试连接我们的模型,因此如果我们在一个面板中更改ModelObject,它在所有相关面板中也会更改请分享您的知识。。。Thx

在ParentPanel(选项A)中使用资源键是非常好的,这甚至允许您输入标签。
如果您的计时器实体没有标签(例如,由用户编辑),我看不到添加标签有任何好处

Wicket可以处理模型内的几乎任何对象,因此无需构建DTO的中间层。通过将组件直接绑定到实际实体,您的开发速度将大大加快


我可能弄错了,但您的示例中的*Dto后缀给我的印象是,您正在朝相反的方向前进。

在父面板(选项A)中使用资源键是完全正确的,这甚至允许您输入标签。
如果您的计时器实体没有标签(例如,由用户编辑),我看不到添加标签有任何好处

Wicket可以处理模型内的几乎任何对象,因此无需构建DTO的中间层。通过将组件直接绑定到实际实体,您的开发速度将大大加快


我可能弄错了,但您示例中的*Dto后缀给我的印象是,您正朝相反的方向前进。

选项A更好,您可以使用StringResourceModel,在一个控件中同时显示标签和时间

PropertyModel timerModel = new PropertyModel(getDefaultModel(), "timerAValidUntil");
StringResourceModel labelModel = new StringResourceModel("timerLabel", this, timerModel));
Label timerLabel = new Label("timerLabel", labelModel);

如果希望它具有“停止计时器”操作,可以在标签内添加链接。请参见

选项A中的“将wicket组件放入消息中”,您可以使用StringResourceModel在一个控件中同时显示标签和时间

PropertyModel timerModel = new PropertyModel(getDefaultModel(), "timerAValidUntil");
StringResourceModel labelModel = new StringResourceModel("timerLabel", this, timerModel));
Label timerLabel = new Label("timerLabel", labelModel);
如果希望它具有“停止计时器”操作,可以在标签内添加链接。请参阅中的“将wicket组件放入消息”

PropertyModel timerModel = new PropertyModel(getDefaultModel(), "timerAValidUntil");
StringResourceModel labelModel = new StringResourceModel("timerLabel", this, timerModel));
Label timerLabel = new Label("timerLabel", labelModel);