Значение по умолчанию для пустых полей в отчете Jasper - PullRequest
6 голосов
/ 07 марта 2011

Фон

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

Проблема

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

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

Идея

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

Вопрос

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

Спасибо.

Ответы [ 2 ]

10 голосов
/ 07 марта 2011

Решение № 1

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

  1. Используйте обычное поле Double (doubleField) для значения столбца.
  2. Добавить статическое текстовое поле String в том же месте.
  3. Измените поле Double на Пробел, когда ноль .
  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 как текстовую строку, и используйте «N / A» в строке (с помощью оператора CASE или DECODE в запросе).

Однако избегайте этого решения, так как оно не подлежит обслуживанию.

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

Не кодировать строку «N / A» во всех отчетах; поместите текст «N / A» в константу или параметр со значением по умолчанию «N / A».

0 голосов
/ 14 мая 2019

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

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

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

...