Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改属性在Wicket Datatable中的显示方式_Java_Datatable_Wicket - Fatal编程技术网

Java 更改属性在Wicket Datatable中的显示方式

Java 更改属性在Wicket Datatable中的显示方式,java,datatable,wicket,Java,Datatable,Wicket,我正在Wicket中开发一个新的应用程序,遇到了一个小问题 我使用的是Wicket DataTable,但我希望表中的某些属性的显示方式与其“实际”值不同。例如,我有一个日期显示为“2011-09-01 00:00”,但我希望它显示为“2011-09-01”。我该怎么做 我真的不想更改为POJO或日期对象(可能会覆盖某些东西,在什么地方?) 提前谢谢! Olle通过使用应用程序中配置的,您将能够以您想要的方式格式化日期,例如。您可以创建一个自定义IColumn实现,该实现可以格式化值: clas


我正在Wicket中开发一个新的应用程序,遇到了一个小问题

我使用的是Wicket DataTable,但我希望表中的某些属性的显示方式与其“实际”值不同。例如,我有一个日期显示为“2011-09-01 00:00”,但我希望它显示为“2011-09-01”。我该怎么做

我真的不想更改为POJO或日期对象(可能会覆盖某些东西,在什么地方?)

提前谢谢!

Olle

通过使用应用程序中配置的,您将能够以您想要的方式格式化日期,例如。

您可以创建一个自定义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;
            }
        };
    }
}
class FormattedPropertyColumn扩展了PropertyColumn{
私人最终格式;
公共格式化PropertyColumn(IModel显示模型、字符串sortProperty、字符串propertyExpression、格式){
super(displayModel、sortProperty、propertyExpression);
this.format=格式;
}
公共格式化PropertyColumn(IModel显示模型、字符串propertyExpression、格式){
超级(displayModel、propertyExpression);
this.format=格式;
}
@凌驾
受保护的IModel createLabelModel(IModel rowModel){
最终IModel originalModel=super.createLabelModel(rowModel);
返回新的AbstractReadOnlyModel(){
@凌驾
公共字符串getObject(){
对象值=originalModel.getObject();
返回(值!=null)?格式。格式(值):null;
}
};
}
}
然后在实例化时传递所需的格式

List<IColumn> columns = Arrays.asList(
    new FormatedPropertyColumn<POJO>(Model.of("Date"), "date", new SimpleDateFormat("yyyy-MM-dd"))
);
List columns=Arrays.asList(
新的格式化属性列(型号为(“日期”),“日期”,新的简化格式为(“yyyy-MM-dd”))
);

此方法的问题在于此设置是全局设置。它不仅会改变这个特定表格的格式,还会改变你显示日期的每个地方(除非你在本地重写它)。是的,我给出了这个提示作为起点,因为他似乎是从Wicket开始的。您必须小心使用应用程序范围的
Converter
sye。有时候这是合适的,但是你必须确定你想要全球化。谢谢。是的,我是wicket的初学者:),在我的情况下,它适合全局设置,所以这是完美的。这是一个非常好的答案,除了我会使用IConverter而不是Format类。