【问题标题】:How to change wicket DatePicker markup?如何更改检票口 DatePicker 标记?
【发布时间】:2025-12-30 10:05:18
【问题描述】:

我正在尝试在 Apache Wicket 中更改 DatePicker 的 HTML 标记。 我现在拥有的:

public CustomDateTextField(final String id, IModel<T> model, Class<T> type, String modelPath) {
        super(id, model, type, modelPath);
        addDatePicker();

}

而且这个使用默认标记。例如,要初始化这个,我使用以下 Java 代码:

CustomDateTextField<?> textField = new CustomDateTextField(field, model.bind(field), pathPrefix + "." + field);

还有这个 HTML 标记:

<input wicket:id="date" name="date" type="text"  size="10" maxlength="10" />

但为了测试自动化,我希望在 UI 上提供唯一 ID。我的意思是,如果我现在在 UI 上检查我的 datePicker,我将拥有:

<img style="cursor: pointer; border: none;" id="date53Icon" src="resources/org.apache.wicket.extensions.yui.calendar.DatePicker/icon1.gif" alt="" title="">

但我需要使这个特定的 datePicker 独一无二。例如,我可以添加到 html name="apocalypseDate",但要做到这一点,我需要以某种方式提取标记。现在我很困惑如何做到这一点。

提前致谢!

【问题讨论】:

  • 嗨,我不明白你所说的“使这个特定的 datePicker 独一无二”到底是什么意思。你需要为img标签分配一个唯一的id吗?
  • 我的意思是我希望页面上的 datePickers 很少,但 ID 或名称不同。所以我希望在检查元素时能够看到这一点。例如,我想要 2 个日期选择器: 1. name="startDate"; 2.名称=“结束日期”。我现在拥有的 - 生成的 id,它随着页面刷新而改变。我想让它保持不变。
  • 好的,谢谢您的澄清。在这种情况下,我还建议使用 setMarkupId 设置 id,或者,您可以使用属性修饰符(请参阅下面的答案)

标签: java date datepicker wicket markup


【解决方案1】:

id 始终是组件的组件 id 和 Icon(这就是你得到date53Icon 的原因),在DatePicker#getIconId 中定义。不幸的是,这个方法是最终的,所以你不能覆盖它。但是你可以设置textField的id:

textField.setMarkupId("textField");
textField.setOutputMarkupId(true);

然后图像的 id 将是textFieldIcon

【讨论】:

    【解决方案2】:

    或者,您可以像这样设置名称属性:

    textField.add(AttributeModifier.replace("name", "fixedValue"));
    

    【讨论】:

    • 在这种情况下不起作用。他想设置DatePicker生成的图像的id,而不是TextField的id/name。