改变Wicket Datatable中属性的呈现方式

4
我正在使用Wicket开发一个新应用程序,但遇到了一个小问题。
我正在使用Wicket DataTable,但我希望其中一些属性与其“实际”值不同。例如,我有一个日期,显示为“2011-09-01 00:00”,但我希望它显示为“2011-09-01”。我该怎么做?
我真的不想改变POJO或Date对象(也许要覆盖某些内容吗?)。
提前感谢! Olle
2个回答

7
您可以创建一个自定义的IColumn实现,来格式化值:
class FormatedPropertyColumn<T> extends PropertyColumn<T> {

    private final Format format;

    public FormatedPropertyColumn(IModel<String> displayModel, String sortProperty, String propertyExpression, Format format) {
        super(displayModel, sortProperty, propertyExpression);
        this.format = format;
    }

    public FormatedPropertyColumn(IModel<String> displayModel, String propertyExpression, Format format) {
        super(displayModel, propertyExpression);
        this.format = format;
    }

    @Override
    protected IModel<?> createLabelModel(IModel<T> rowModel) {
        final IModel<?> originalModel = super.createLabelModel(rowModel);
        return new AbstractReadOnlyModel<String>() {
            @Override
            public String getObject() {
                Object value = originalModel.getObject();
                return (value != null) ? format.format(value) : null;
            }
        };
    }
}

然后在实例化时,您需要传入所需的格式。
List<IColumn> columns = Arrays.asList(
    new FormatedPropertyColumn<POJO>(Model.of("Date"), "date", new SimpleDateFormat("yyyy-MM-dd"))
);

一个非常好的答案,只是我会使用IConverter而不是Format类。 - Manuel Manhart

5
通过在您的应用程序中配置转换器,您将能够按照您想要的方式格式化日期,例如。

这种方法的问题在于,此设置是全局的。它不仅会更改此特定表格中的格式,而且还会更改您显示日期的每个地方(除非您在本地覆盖它)。 - tetsuo
是的,我给出这个提示作为一个起点,因为他似乎从Wicket开始。你必须小心应用程序范围内的转换器。 - Cedric Gatay
是的。有时候使用它是合适的,但你必须确信你需要将它设为全局。 - tetsuo
谢谢。是的我是Wicket的初学者 :),在我的情况下,全局设置非常适合,所以这很完美。 - bumaklion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接