Значение по умолчанию для пустых полей в отчете Jasper

Задний план

ResultSet имеет много полей значений Double (с такими шаблонами, как "###0.000"). Некоторые значения могут быть null.

Проблема

Я хочу заменить значения null на "N/A", которые являются String и не могут печатать в поле Double. Печать "0.00" для значений null недопустима.

Использование значения PrintWhenExpression ($F{value} != null) ? $F{value} : "N/A" не работает; таким образом использовать шаблоны невозможно.

Идея

Добавьте скрытые поля с надписью «Н/Д». Эти поля будут напечатаны, только если значение равно null.

Вопрос

Есть ли лучшее решение, и если да, то какое?

Спасибо.


person jiraiya    schedule 07.03.2011    source источник


Ответы (2)


Решение №1

Ваше решение:

  1. Используйте обычное поле Double (doubleField) для значения столбца.
  2. Добавьте статическое текстовое поле String в том же месте.
  3. Измените значение поля «Двойное число» на Пустое значение при нулевом значении.
  4. Установите значение PrintWhenExpression для текстового поля String: $F{doubleField} == null.

Решение №2

Проблема в том, как вы указали, что Double и String - это два разных типа данных. Вы можете присвоить строковой переменной значение Double, используя соответствующее выражение. Затем используйте переменную String в качестве поля. Выражение может напоминать:

($F{doubleField} == null) ?
  "N/A" : new java.text.DecimalFormat("#.##").format($F{doubleField})

(Примечание: я предпочитаю использовать == вместо !=. Думайте о хорошем.)

Решение №3

Измените оператор SQL, чтобы предварительно отформатировать Double как текстовую строку, и используйте «Н/Д» в строке (используя оператор CASE или DECODE в запросе).

Однако избегайте этого решения, так как оно не ремонтопригодно.

Рекомендация

Не кодируйте строку «Н/Д» в отчете (отчетах); поместите текст «Н/Д» в константу или параметр со значением по умолчанию «Н/Д».

person Dave Jarvis    schedule 07.03.2011
comment
Спасибо за ответ. Я понял, что можно написать выражение вида: $F{value} != null ? String.format(%.3f, $F{value}) : N/A (или константа для N/A) - person jiraiya; 08.03.2011
comment
А также я вижу, что можно использовать java.text.DecimalFormat. Большое спасибо за 3 решения, которые хорошо объяснены. - person jiraiya; 08.03.2011

Вы можете попробовать что-то подобное в своем выражении поля:

("Your static text "+(($F{field}!=null)?$F{field}:"")) 

Или, если вы не хотите, чтобы ваш статический текст был виден, когда поле пустое, попробуйте поместить $F{field}!=null в свой PrintWhenExpression.

person Anjar    schedule 14.05.2019