2015-11-04 2 views
0

Я использую классы JPA Container with Entity для заполнения таблицы из MySQL. Два поля - поля GregorianCalendar (один - дата и один - время), и я ищу способ их форматирования/преобразования отдельно, чтобы дата отображалась как короткая дата (например, dd-MM-yyyy) и время появляется как короткое время 24h (HH: mm) в соответствии с локалью.Форматирование двух полей Entity одного и того же типа по-разному в таблице

Основываясь на результатах поиска, я понимаю, что лучший способ форматирования даты и времени, чтобы переопределить таблицу по умолчанию, так это то, что я сделал:

final Table opTable = new Table() { 

      private static final long serialVersionUID = 1L; 

      @Override 
      protected String formatPropertyValue(Object rowId, Object colId, Property property) { 

       Object v = property.getValue(); 

       if (v instanceof GregorianCalendar) { 
        GregorianCalendar datez = (GregorianCalendar) v; 
        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, Locale.GERMANY); 
        String formattedDate = df.format(datez.getTime()); 
        return formattedDate; 
       } 

       if (v instanceof GregorianCalendar) { 
        GregorianCalendar timeValue = (GregorianCalendar) v; 
        SimpleDateFormat fmt = new SimpleDateFormat("HH:mm:ss"); 
        fmt.setCalendar(timeValue); 
        String timeFormatted = fmt.format(timeValue.getTime()); 
        return timeFormatted; 
       } 

       return super.formatPropertyValue(rowId, colId, property); 
      } 

     }; 

и заполнение таблицы:

bookings = JPAContainerFactory.make(BookingEntity.class, CSAdminUI.PERSISTENCE_UNIT); 
opTable = new Table(null, bookings); opTable.setContainerDataSource(bookings); 
opTable.setVisibleColumns(new Object[] { "operator.rowid", "activity.name", "startDate", "startTime", "done", "price", "operatorCost", "paymentType", "voucherCode", "hints", "timeLeft", "succeded", "teamPicture", "comment" }); 

Первое условие - единственное, что применяется, видя, что оба поля являются экземплярами GregorianCalendar. Есть ли другой способ, которым я могу ссылаться на поля или по-другому, я могу выборочно отформатировать их, имея в виду, что они оба одного типа?

+0

I подумайте, что аргумент 'Property property' содержит имя свойства, поэтому вы можете изменить поведение в имени свойства –

+0

Я не думаю, что' Property property' содержит имя, но оно содержит фактическое значение. Это похоже на 'property.getValue()' Печать 'property.toString()' дает тот же результат, что и print' property.getValue() ' – Mimzo

+0

. Имущество, как правило, не только значение, но и еще несколько информация. Как вы заполняете свой стол? –

ответ

0

Я бы сказал, что самое чистое решение создать два Converter с, а затем применить преобразователь на колонку следующим образом:

table.setConverter("myPropertyId", new MyConverter()); 

Вот пример о Converter реализации:

public class MyConverter implements Converter<String, GregorianCalendar> { 
    @Override 
    public GregorianCalendar convertToModel(String value, Class<? extends GregorianCalendar> targetType, Locale locale) throws ConversionException { 
     throw new ConversionException("Converting from Presentation to Model is not supported."); 
    } 

    @Override 
    public String convertToPresentation(GregorianCalendar value, Class<? extends String> targetType, Locale locale) throws ConversionException { 
     // TODO do the conversion here 
     return null; 
    } 

    @Override 
    public Class<GregorianCalendar> getModelType() { 
     return GregorianCalendar.class; 
    } 

    @Override 
    public Class<String> getPresentationType() { 
     return String.class; 
    } 
} 
+0

Это именно то, что я искал. Он отлично работает! – Mimzo

Смежные вопросы