我有一个简单的Java类,让我们把它命名为Person:它包含了一个人的信息,顾名思义。所以它有名字,姓氏,地址,性别,电话号码和我的罪魁祸首生日。我有一个允许用户编辑这些字段的页面:它由一个自动完成的textfield组成,用户可以在其中输入Person ID或其中的一部分,然后从下拉列表中选择要编辑的人。页面的其余部分是与Wicket模型绑定到用户从列表中选择的人的文本字段列表:当发生这种情况时,每个textfield将被正确填充所选Person对象的属性。表示textfields及其模型的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设置为" date“时,自动更新功能就停止工作: 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">因此,日期信息在那里,即使textfield本身似乎无法显示它。
任何帮助都是非常感谢的。如果你需要更多的信息或更多的代码,请告诉我。
发布于 2018-05-09 20:46:34
根据https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date,该值应该使用-作为月、日和年之间的分隔符。
发布于 2018-05-10 11:58:28
我今天已经实现了一个TextField,它使用html5输入type="date“,并将日期存储在Java8 LocalDate中--到目前为止它还在工作。下面是实现--也许它会对您有用:
public class Html5LocalDateField extends TextField<LocalDate> {
public Html5LocalDateField(String id, IModel<LocalDate> model) {
super(id, model);
add(AttributeModifier.replace("type", "date"));
}
@Override
public IConverter getConverter(Class type) {
return new IConverter<LocalDate>() {
private static final long serialVersionUID = -986861910933163601L;
@Override
public LocalDate convertToObject(String value, Locale locale) {
return LocalDate.parse(value, DateTimeFormatter.ISO_DATE);
}
@Override
public String convertToString(LocalDate date, Locale locale) {
return date.format(DateTimeFormatter.ISO_DATE);
}
};
}
}https://stackoverflow.com/questions/50256743
复制相似问题