Кажется, работает следующее:
- Нажмите Окно >> Предпочтения
- Выбрать Возможности
- Проверить Разработка
- Нажмите OK
Далее:
- Откройте Project Explorer
- Щелкните правой кнопкой мыши имя проекта
- Выберите Свойства
- Выберите Путь сборки Java
- Нажмите Источник tab
- Нажмите Добавить папку
- Выбрать Создать новую папку
- Установить имя папки на:
src
- Нажмите Готово
- Выберите src
- Нажмите OK
- Установить папку вывода по умолчанию:Имя проекта /
build
- Нажмите OK
Создайте отчет как обычно (с текстовым полем, в котором используется дата, либо параметром, либо полем), затем:
- Выберите отчет на панели Outline
- Откройте Properties panel
- Установить Формат фабричного класса в:
com.company.reports.ReportFormatFactory
Затем создайте некоторый исходный код внутри каталога "src" в пакете(папка) с именем com.company.reports
.Вставьте следующее в файл с именем ReportFormatFactory.java
, который сохраняется в этом каталоге:
import java.text.DateFormat;
import java.util.Locale;
import java.util.TimeZone;
import net.sf.jasperreports.engine.util.DefaultFormatFactory;
/**
* Delegates creation of date and number formatters to JasperReports' default
* formatters. This class ensures that dates are formatted consistently across
* all reports.
*/
public class ReportFormatFactory extends DefaultFormatFactory {
/**
* Returns a DateFormat instance that creates dates in YYYY/MM/dd format.
*
* @param pattern Unused.
* @param locale Passed to the DefaultFormatFactory instance.
* @param timezone Passed to the DefaultFormatFactory instance.
*
* @return An object that can format dates.
*/
@Override
public DateFormat createDateFormat(
String pattern, Locale locale, TimeZone timezone ) {
return super.createDateFormat( "YYYY/MM/dd", locale, timezone );
}
}
При запуске отчета дату следует отформатировать как YYYY/MM/dd
.
Если выхотите изменить формат (например, на dd/MM/YYYY
), обновите строку формата даты в исходном коде, а затем перезапустите Jaspersoft Studio (похоже, загрузчик классов не перезагружает класс ReportFormatFactory после изменения).
ВИзбегайте необходимости перезапуска каждый раз, когда изменяется формат даты, используйте пакет ресурсов:
- Создайте новую папку проекта с именем
i18n
- Щелкните правой кнопкой мыши на имени проекта
- Выбрать Создать >> Папка
- Установить имя папки на
i18n
- Нажмите Готово
- Щелкните правой кнопкой мыши i18n
- Выберите Новый >> Другой
- Разверните Редактор сообщений
- Выберите ResourceBundle
- Нажмите Далее
- Установите имя:
ReportsLocale
- Добавьте Locale (например, en_US)
- Нажмите Готово
Добавьте каталог i18n впроцесс сборки:
- Щелкните правой кнопкой мыши i18n
- Выбрать Путь сборки >> Настроить путь сборки
- Нажмите Добавить папку
- Проверить i18n
- Нажмите OK
- Нажмите OK снова
Измените метод createDateFormat
следующим образом:
@Override
public DateFormat createDateFormat(
String pattern, Locale locale, TimeZone timezone ) {
String dateFormat = DATE_FORMAT_DEFAULT;
try {
ResourceBundle rb = ResourceBundle.getBundle( "EducationReports" );
String df = rb.getString( DATE_FORMAT );
if( df != null ) {
dateFormat = df;
}
}
catch( Exception e ) {
// If the resource bundle isn't found, use the default date format.
// TODO: Pass this exception into a logger.
}
return super.createDateFormat( dateFormat, locale, timezone );
}
И добавьте эти константы в определение класса (сразу после объявления public class
,вокруг строки 15/16):
private final static String DATE_FORMAT = "date.format";
private final static String DATE_FORMAT_DEFAULT = "YYYY/MM/dd";
Перезапустите Jaspersoft Studio, затем:
- Отредактируйте файл ReportsLocale
- Добавьте
date.format
property - Установите для свойства
dd/MM/YYYY
- Установите значение свойства для всех локалей.
При запуске отчета дата должна выглядеть следующим образом29/02/1976, например.
Вы можете адаптировать это, чтобы изменить значение поля кактребуется.