Как избежать нулевых значений в отчетах яшмы - PullRequest
26 голосов
/ 05 июля 2010

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

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

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

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

Обратите внимание на выделенный ноль.Можно ли как-нибудь избежать этого?

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

Ответы [ 14 ]

39 голосов
/ 05 июля 2010

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

  • В iReport установите флажок Пусто при пустом, когда выбрано ваше поле.
  • В файле jasper jrxml: <textField isBlankWhenNull="true">
31 голосов
/ 06 июля 2010

В выражении Вы можете использовать код 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}
9 голосов
/ 16 июля 2010

@ 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})
5 голосов
/ 12 апреля 2016

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

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

Т ($ Р {FirstName})

3 голосов
/ 16 сентября 2013
($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})
1 голос
/ 06 января 2012

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

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

$F{address_stree2}.equals("null") 
0 голосов
/ 23 мая 2017

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

0 голосов
/ 12 февраля 2017

Попробуйте выполнить следующее:

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

Или задайте свойство отчетов: если ресурс отсутствует, введите: Тип Пусто

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

0 голосов
/ 21 декабря 2016

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

, если null напечатает что-то еще, выведите поле.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...