首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wicket 8 DateTextField (来自wicket扩展)

Wicket 8 DateTextField (来自wicket扩展)
EN

Stack Overflow用户
提问于 2018-05-09 15:14:24
回答 2查看 1.6K关注 0票数 1

我有一个简单的Java类,让我们把它命名为Person:它包含了一个人的信息,顾名思义。所以它有名字,姓氏,地址,性别,电话号码和我的罪魁祸首生日。我有一个允许用户编辑这些字段的页面:它由一个自动完成的textfield组成,用户可以在其中输入Person ID或其中的一部分,然后从下拉列表中选择要编辑的人。页面的其余部分是与Wicket模型绑定到用户从列表中选择的人的文本字段列表:当发生这种情况时,每个textfield将被正确填充所选Person对象的属性。表示textfields及其模型的java的简短示例:

代码语言:javascript
复制
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标记更改为

代码语言:javascript
复制
<input style="display: table-cell;" type="text" wicket:id="bday"/> 

代码语言:javascript
复制
<input style="display: table-cell;" type="date" wicket:id="bday"/> 

为了有一个好的,易于使用的选择日期。

问题是,当HTML设置为" date“时,自动更新功能就停止工作: DateTextField总是显示默认的"dd/MM/yyyy”文本,而不是一个真正的日期。当用户从列表中选择一个人(甚至表示性别的下拉列表)时,所有其他字段都会更新,因此Wicket模型机制仍然有效。我尝试过重写PropertyModel和DateTextField的方法,以查看连接到DateTextField的模型对象是否在某个时候丢失了,但是它始终存在,尽管它没有被表示。我还发现最后的HTML如下所示:

代码语言:javascript
复制
<input style="display: table-cell;" type="text" wicket:id="bday" value="01/01/2011" name="bday">

因此,日期信息在那里,即使textfield本身似乎无法显示它。

任何帮助都是非常感谢的。如果你需要更多的信息或更多的代码,请告诉我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-09 20:46:34

根据https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date,该值应该使用-作为月、日和年之间的分隔符。

票数 1
EN

Stack Overflow用户

发布于 2018-05-10 11:58:28

我今天已经实现了一个TextField,它使用html5输入type="date“,并将日期存储在Java8 LocalDate中--到目前为止它还在工作。下面是实现--也许它会对您有用:

代码语言:javascript
复制
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);
         }
      };
   }

}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50256743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档