【发布时间】:2023-03-17 00:53:01
【问题描述】:
我有一个简单的 Java 类,我们将其命名为 Person:顾名思义,它包含关于一个人的信息。所以它有名字,姓氏,地址,性别,电话号码和我的罪魁祸首,生日等属性。 我有一个允许用户编辑这些字段的页面:它由一个自动完成的文本字段组成,用户可以在其中输入人员 ID 或其中的一部分,并从下拉列表中选择他们想要编辑的人员。页面的其余部分是与 Wicket 模型绑定到用户从列表中选择的 Person 的文本字段列表:当这种情况发生时,每个文本字段都会正确填充所选 Person 对象的属性。 表示文本字段及其模型的 java 的简短示例:
private Person person;
[...]
formPatient = new Form("patientForm", new PropertyModel<>(this, "person"));
[...]
formPatient.add(tmp = new MyTextField<>("nome", new PropertyModel<>(this, "person.nome")));
formPatient.add(tmp = new MyTextField<>("secondoNome", new PropertyModel<>(this, "person.secondoNome")));
formPatient.add(tmp = new MyTextField<>("cognome", new PropertyModel<>(this, "person.cognome")));
DropDownChoice sessoDDC = new DropDownChoice("sesso", new PropertyModel<>(this, "person.sesso"), Arrays.asList(Enums.Sex.values()));
formPatient.add(sessoDDC);
formPatient.add(dtf = new DateTextField("bday", new PropertyModel<Date>(this, "person.bday"), "dd/MM/yyyy"));
[...]
正如我所说,这很好用。但是,对于生日字段,我需要使用带有日历选择器的文本字段。它可以很容易地安排,只需从
更改相关的HTML标记<input style="display: table-cell;" type="text" wicket:id="bday"/>
到
<input style="display: table-cell;" type="date" wicket:id="bday"/>
为了有一个漂亮且易于使用的选择器来选择日期。
问题在于,当 HTML 类型设置为“日期”时,自动更新功能停止工作:DateTextField 始终显示默认的“dd/MM/yyyy”文本,而不是真实日期。当用户从列表中选择一个人(甚至是代表性别的下拉列表)时,所有其他字段仍然会更新,因此 Wicket 模型机制仍然有效。 我尝试了覆盖 PropertyModel 和 DateTextField 的方法,以查看连接到 DateTextField 的模型对象是否在某个时候丢失了,但它始终存在,尽管它没有被表示出来。我也发现最终的HTML是这样的:
<input style="display: table-cell;" type="text" wicket:id="bday" value="01/01/2011" name="bday">
所以日期信息在那里,即使文本字段本身似乎无法显示它。
感谢任何帮助。如果您需要更多信息或更多代码,请告诉我。
【问题讨论】:
标签: date wicket textfield models