java - 在 Wicket 中全局注册字段格式

标签 java wicket date-format

我仔细研究了Jonik's entry关于在 Wicket 中自定义 BigDecimal 格式。感谢这段优秀的代码。不幸的是,我无法让它适用于我的用例。

我想在全局范围内注册日期格式,并在 Application 子类中使用以下代码:

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

        @Override
        public DateFormat getDateFormat(Locale ignore) {
            return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
        }

    });
    return converterLocator;
}

那么在网页中使用日期字段的代码如下:

form.add(new TextField<Date>("dateField"));

呈现时,日期字段显示来自 org.apache.wicket.util 的标准 java.text.DateFormat.SHORT (02.11.11 11:59) 格式。 convert.converter.DateConverter 类而不是我的自定义 SimpleDateFormat (02.11.2011 11:59:42)。

我检查过整个过程中都在使用 java.util.Date。 Wicket 版本为 1.4.12。

有什么想法吗?

最佳答案

我认为您的 dateField 类型为 java.util.Date,但实际对象(从数据库加载?)例如java.sql.Timestampjava.util.Date 的其他子项。这就是 ConverterLocator 选择其他转换器而不是您的转换器的原因。 ConverterLocator 的源代码如下:

set(Date.class, new DateConverter());
set(Calendar.class, new CalendarConverter());
set(java.sql.Date.class, new SqlDateConverter());
set(java.sql.Time.class, new SqlTimeConverter());
set(java.sql.Timestamp.class, new SqlTimestampConverter());

因此,您需要知道 dateField 的确切运行时类型并为其覆盖转换器。

关于java - 在 Wicket 中全局注册字段格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8064878/

相关文章:

尝试访问 S3 Bucket 时出现 javax.net.ssl.SSLPeerUnverifiedException

java - 有偏随机数生成器 - Java

java - Wicket ajax 调用不会呈现我的新组件

java - 我的 Joda Time 格式模式是否不正确,无法在解析的 DateTime 输出中生成 `T` 和 `Z` ?

java - 如何处理 Bean 验证异常

java - Wicket - 在多个地方显示相同的文本

java - apache wicket 文本字段 null

javascript - JavaScript 的解析将识别哪种字符串日期格式?

mysql - 使用 PHP 事件自动备份数据库

java - 想要一个带有透明背景图像的 JLabel