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

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

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

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

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

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

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

Ответ 1

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

  • В iReport установите флажок "Пустое при нулевом" при выборе поля.
  • В jasper jrxml файле: <textField isBlankWhenNull="true">

Ответ 2

В выражении Вы можете использовать код Java.

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

$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}

Ответ 3

@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})

Ответ 4

Чтобы решить эту проблему, сначала проверьте свойства поля Пустое, когда 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}

Ответ 5

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

Ответ 6

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

Т ($ Р {FirstName})

Ответ 7

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

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

$F{address_stree2}.equals("null") 

Ответ 8

Вы можете написать код 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}) 

Установить "Пусто" Когда свойство null "null" соответствует true

Привет,

Ankush

Ответ 9

Если вы работаете в ecliple + jasper softReports, вы просто паритесь ниже шагов 1. Выберите поле + правое выделение и выберите опцию showProperties. 2.click TextField выберите BlankWhenNull 3.Compile и Rebuild проверьте его.

Ответ 10

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

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

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

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

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

abdulkahliq из "Эр-Рияда"

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

abdulkahliq

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

Ответ 11

если ваши поля - это Строки, которые просто включают свойство (BLANK WHEN NULL). В противном случае используйте тернарный оператор

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

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

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

Ответ 12

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

$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}

Или Установить свойство отчетов:  Когда отсутствует ресурс ресурса: Тип Пусто

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

Ответ 13

Вы можете установить высоту текстового поля как 1, установите флажок Stretch with overflow как true и Blank, когда значение null равно true, поэтому, когда значение поля пустое, оно не останется пустым.

Ответ 14

($F{address_street1} + " " + $F{address_street2} + " " + $F{address_state} + " " +
    $F{address_country} + " " + $F{address_zip}).replaceAll("null", "")