Ответ 1
Задайте для свойства isBlankWhenNull
значение true.
- В iReport установите флажок "Пустое при нулевом" при выборе поля.
- В jasper jrxml файле:
<textField isBlankWhenNull="true">
У меня есть поле в моем сообщении яшмы, которое имеет значение выражения, например
$F{address_street1}+" "+$F{address_street2}+ " " +$F{address_state} + " "+$F{address_country}+ " "+$F{address_zip}
Моя проблема в том, что если любое из полей здесь равно null, я получаю нулевое значение между другими вещами вроде
101 Main St****null****ILUnited States12345
Обратите внимание на выделенный нуль. Есть ли способ избежать этого?
Я попытался проверить нулевое значение для конкретного поля в нем с помощью логического выражения и заменить его пустым, но это не работает.
Задайте для свойства isBlankWhenNull
значение true.
<textField isBlankWhenNull="true">
В выражении Вы можете использовать код 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}
@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})
Чтобы решить эту проблему, сначала проверьте свойства поля Пустое, когда 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}
($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})
если вы можете использовать jasperreports-functions, и вы хотите вывести значение String, вы можете сделать это с помощью функции T(), которая возвращает текст String или пустую строку.
Т ($ Р {FirstName})
У меня есть опция (Пустое, когда Null), проверяемое для каждого поля в отчете и все еще видя нули в полях. Итак, я использовал выражения отчетов.
Так как каждая переменная отчета является строкой, для проверки нулевого использования:
$F{address_stree2}.equals("null")
Вы можете написать код 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
Если вы работаете в ecliple + jasper softReports, вы просто паритесь ниже шагов 1. Выберите поле + правое выделение и выберите опцию showProperties. 2.click TextField выберите BlankWhenNull 3.Compile и Rebuild проверьте его.
У меня есть аналогичный случай, который я хочу, чтобы не показывать 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
Спасибо и с уважением,
если ваши поля - это Строки, которые просто включают свойство (BLANK WHEN NULL). В противном случае используйте тернарный оператор
если null печатает что-то еще, напечатайте поле.
field==null?whatever:field
field=null?false:true
Эти оба должны решить проблему.
Попробуйте следующее:
$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}
Или Установить свойство отчетов: Когда отсутствует ресурс ресурса: Тип Пусто
оба работают в моем случае.
Вы можете установить высоту текстового поля как 1, установите флажок Stretch with overflow как true и Blank, когда значение null равно true, поэтому, когда значение поля пустое, оно не останется пустым.
($F{address_street1} + " " + $F{address_street2} + " " + $F{address_state} + " " +
$F{address_country} + " " + $F{address_zip}).replaceAll("null", "")