Как избежать нулевых значений в отчетах jasper

У меня есть поле в моем отчете о яшме, которое имеет значение выражения, например

$F{address_street1}+" "+$F{address_street2}+ " " +$F{address_state} + " "+$F{address_country}+ " "+$F{address_zip}

Моя проблема в том, что если какое-либо из полей здесь равно нулю, я получаю нулевое значение между другими вещами, такими как

101 Main St****null****ILUnited States12345 

Обратите внимание на выделенный нуль. Есть ли способ избежать этого?

Я попытался проверить нулевое значение для определенного поля в нем, используя логическое выражение и заменив его пустым, но это, похоже, не работает.


person Sachin Anand    schedule 05.07.2010    source источник


Ответы (13)


Установите для свойства isBlankWhenNull значение true.

  • В iReport установите флажок Blank When Null, когда ваше поле выбрано.
  • В файле jasper jrxml: <textField isBlankWhenNull="true">
person krock    schedule 05.07.2010
comment
это не работает, потому что мое общее поле (которое представляет собой объединение нескольких отдельных полей) не равно нулю, а только часть поля равна нулю, чего я хочу избежать - person Sachin Anand; 06.07.2010
comment
Этот ответ охватывает очень распространенный вопрос... но не распространяется на заданный здесь вопрос. Хотя в вопросе недостаточно информации, чтобы быть уверенным, вероятно, было бы достаточно изменить язык отчета с Groovy на Java. - person mdahlman; 13.11.2011
comment
НЕ ПРАВИЛЬНО для конкретного вопроса! прочитайте ответ ниже stackoverflow.com/a/3186360/1241276 - person lory105; 12.01.2018
comment
это не ответ, на который задан вопрос. Я не понимаю, как люди так сильно проголосовали за этот ответ. - person Cem U; 24.05.2019

В The Expression вам разрешено использовать код Java.

Итак, что вам нужно сделать, это проверить, что значение поля равно нулю, если затем заменить его пустой строкой.

$F{address_street1} == null ? "" : $F{address_street1}+ " " +
$F{address_street2} == null ? "" : $F{address_street2}+ " " +
$F{address_state} == null ? "" : $F{address_state}  + " " +
$F{address_country} == null ? "" : $F{address_country}+ " " +
$F{address_zip} == null ? "" : $F{address_zip}
person Damian Leszczyński - Vash    schedule 06.07.2010
comment
Обратите внимание на тех, кто все еще работает с IReport 3.7.4, это не работает. По какой-то причине ($F{field} == null ? x : y) возвращает значение null (которое преобразуется в false в тернарном операторе Java). - person Brennen Sprimont; 06.07.2015

@Vash, Да, это то, что я бы сделал, за исключением того, что я думаю, что вы можете захотеть поместить каждое выражение в круглые скобки, чтобы каждое выражение не зависело от других. Так:

($F{address_street1} == null ? "" : $F{address_street1}+ " ") +
($F{address_street2} == null ? "" : $F{address_street2}+ " ") +
($F{address_state} == null ? "" : $F{address_state}  + " ") +
($F{address_country} == null ? "" : $F{address_country}+ " ") +
($F{address_zip} == null ? "" : $F{address_zip})
person rogiller    schedule 16.07.2010
comment
Я делал это в течение долгого времени, но я надеюсь, что у кого-то есть менее подробное решение. - person Alexander Ljungberg; 29.10.2010
comment
мне тоже лучше: без круглых скобок у меня проблемы с компиляцией jrxml - person Falco; 06.09.2019

если вы можете использовать функции jasperreports и хотите вывести строковое значение, вы можете сделать это с помощью функции T(), которая возвращает текстовую строку или пустую строку.

Т($F{имя})

person panser    schedule 08.10.2015

Чтобы сначала решить эту проблему, проверьте свойства поля. Пусто, если флажок null в IReport или если это файл Jasper jrxml: <textField isBlankWhenNull="true"> .

Затем я нашел два способа решить эту проблему. Выберите один из описанных ниже способов.
1. Используйте такой синтаксис выражения.

$F{variableName}.equals( "0" )? "" : $F{variableName}

и вы можете использовать такой код, как

$F{address_street1}.equals("0")? "" : $F{address_street1} + " " +  
$F{address_street2}.equals("0")? "" : $F{address_street2} + " " +
$F{address_state}.equals("0")? "" : $F{address_state} + " " +  
$F{address_country}.equals("0")? "" : $F{address_country} + " " +
$F{address_zip}.equals("0")? "" : $F{address_zip}

2. Используйте синтаксис выражения, например

$F{variableName}== null ? "" : $F{variableName}

и вы можете использовать такой код, как

$F{address_street1} == null ? "" : $F{address_street1} + " " +  
$F{address_street2} == null ? "" : $F{address_street2} + " " +
$F{address_state} == null ? "" : $F{address_state} + " " +  
$F{address_country} == null ? "" : $F{address_country} + " " +
$F{address_zip} == null ? "" : $F{address_zip}
person Anup Ghosh    schedule 12.04.2016

Попробуйте следующее:

$F{address_street1}.toString() == null ? "" : $F{address_street1}+ " " +
$F{address_street2}.toString() == null ? "" : $F{address_street2}+ " " +
$F{address_state}.toString() == null ? "" : $F{address_state}  + " " +
$F{address_country}.toString() == null ? "" : $F{address_country}+ " " +
$F{address_zip}.toString() == null ? "" : $F{address_zip}

Или установите свойство отчетов: когда тип ресурса отсутствует: введите пустой

оба работают в моем случае.

person YOGESH C UGALE    schedule 12.02.2017

У меня есть опция (Пустой, когда ноль) проверена для каждого поля в отчете и все еще видны нули в полях. Итак, я использовал выражения отчета.

Поскольку каждая переменная отчета является строкой, для проверки использования null:

$F{address_stree2}.equals("null") 
person Padma Kannan    schedule 06.01.2012

у меня есть аналогичный случай, когда я хочу избежать отображения null в выводе, если у меня есть нулевой параметр
я использую T($P{city}) в редакторе выражений, он оценивается как пустая строка, если вы не передали ему параметр

T() возвращает текстовую строку, если значение является строкой, иначе возвращается пустая строка.

пример использования:

$P{name} + " " + (T($P{city}).isEmpty() ? "" : " from " )+ (T($P{city}).isEmpty() ? "" : "\"" +  T($P{city}) + "\"")

если я передам параметр в $P{city}
результат:

Абдулкахлик из «Рияда»

если я не передам параметр $P{city}, результат будет:

Абдулкахлик

Спасибо и С уважением,

person abdulkhaliq alzahrani    schedule 06.12.2016

Вы можете написать код Java

 package com.xyz

 Class ReportUtil 
  {
      public static String getMyString (String str1 , String str2)
         {
             if((str1!=null) && (str2!=null))
                 return str1 + " " + str2 ;
             else if str1==null
                  return str2 ; 
             return str1 ;                            
          }

   }

В JRXML вы можете использовать следующее выражение в текстовом поле

com.xyx.ReportUtil.getMyString ($F{firstName},$F{lastName}) 

Установите для свойства «Пустой, когда ноль» значение true

С уважением,

Анкуш

person Ankush Chhabra    schedule 05.06.2013

Если вы работаете в ecliple+jasper softReports, выполните следующие действия: 1. выберите поле + щелкните правой кнопкой мыши и выберите параметр showProperties 2. щелкните TextField, выберите BlankWhenNull 3. Скомпилируйте и перестройте его.

person Raja    schedule 23.11.2016

если ваши поля являются строками, просто отметьте свойство (ПУСТО, КОГДА NULL). В противном случае используйте тернарный оператор

если null, напечатайте что-нибудь еще, напечатайте поле.

field==null?whatever:field 
field=null?false:true

Они оба должны решить проблему.

person Majid Ali Khan    schedule 21.12.2016

Вы можете установить высоту текстового поля как 1, установить флаг «Растянуть с переполнением» как «истина» и «Пустой, когда ноль» как «истина», чтобы, когда значение поля было пустым, между ним не оставалось пустого пространства.

person Vinita Shah    schedule 23.05.2017

person    schedule
comment
Пожалуйста, отформатируйте это лучше и объясните, почему это ответ. - person jeff porter; 06.04.2016