3

我在 Wicket 页面的以下代码中遇到 Wiquery DatePicker 问题(使用 CompundPropertyModel,日期属性的类型为 java.util.Date):

DatePicker<Date> datePicker = new DatePicker<Date>("date"){
    @Override
    public boolean isVisible() {
        return selectedType.hasDate();
    }
};
datePicker.setDateFormat(DateUtil.DATE_PATTERN); // pattern is "dd.MM.yyyy"
form.add(datePicker);

这绑定到的 HTML:

<input wicket:id="date" id="date"/>

问题是在编辑现有数据时,输入字段会显示时间和日期,而在提交表单时,验证会失败,因为这不符合模式。

如何让 DatePicker 正确显示当前值?

4

3 回答 3

1

这似乎是相对晦涩的 Wiquery DatePicker 组件中的一个错误。我已经切换到 org.apache.wicket.extensions.yui.calendar.DatePicker,没有这个问题。

于 2011-11-04T09:37:25.957 回答
1

作为DatePicker组件 a TextField,为什么不在其中使用自定义来仅在其IConverter返回?dd.MM.yyyyconvertToObject

我无法看到浏览其源代码的任何已注册IConverter或其他转换输入的方式,因此这可能与该组件中的任何格式化输入相冲突。

更新

在使用 WiQuery 1.2.4 和 Wicket 1.4.17 在快速入门中对此进行调试后,它显示DatePicker(即 a TextField)的初始值是由 执行的标准转换Component.getDefaultModelObjectAsString()

由于TextField具有IModel<Date>,它将使用IConverterDate该类注册的任何内容。在您的情况下,它可能正在使用IConverter随时间格式化的自定义。我会尝试覆盖DatePicker'sgetConverter()并使用SimpleDateFormat遵循setDateFormat().

此问题提示IConverter应与以下内容一起指定DatePicker问题 168:DatePicker 中 NL 的无效(或不常见)日期格式

您可能还会发现 Wicket 用户列表上的这个讨论很有用:DatePicker to pick a year。Julien Roche(该项目的所有者之一)在那里声明setDateFormat仅在客户端使用 JQuery:

我认为您必须在检票口文本字段上设置正确的转换器(使用方法 getConverter 和类 PatternDateConvert 的覆盖)。"dateFormat" 选项仅适用于带有 jQ​​uery 的客户端。

于 2011-11-04T09:40:19.290 回答
0

首先看看https://cwiki.apache.org/WICKET/using-custom-converters.html

那么你知道检票口将你的反对转化为来自那个技工的文本所以..你所要做的一切

重写 Application 类中的 newConverterLocator() 方法以提供自定义 ConverterLocator。

protected IConverterLocator newConverterLocator() {
    ConverterLocator converterLocator = new ConverterLocator();
    converterLocator.set(Date.class, new DateConverter());
    return converterLocator;
}

提示:注意 java.sql.Date 类转换器

于 2011-11-09T23:13:45.593 回答