If-else-if-else в выражении текстового поля

Мне нужно показать столбцы:  - Отправить  - Получать  - отменено

В столбце отчета, проверив значение из БД, которое является "Состояние". Поэтому, если состояние равно 1, то отправьте: = 2 receive, = 3 отменено.

Выражение текстового поля в отчете jasper (? a: b) может принимать только одно условие, как я могу дать несколько условий? что-то вроде лестницы if-else?

Ответы

Ответ 1

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

Например:

(i == 1) ? "Send" : ((i == 2)? "Received" : "Cancelled");

Ответ 2

вы можете использовать метод replace() но вы должны изменить свой класс полей на String, если это не так, EX:

$F{f_phone_type}.replace("0","Phone/ATA").replace("1","Gateway").replace("2","SIPTrunk")

Ответ 3

Сделайте поле статуса параметром, который передается из вашего bean. Таким образом, вы можете выполнить любую необходимую обработку в bean, присвоить результат переменной параметра и передать ее в свой отчет.

Ответ 4

Мой предпочтительный метод - создать параметр с заменами в форме HashMap, когда у вас есть большая группа подстанций или если они могут измениться.

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

Например, если у вас должен быть параметр с именем "risk_types" (используя язык по умолчанию как groovy), вы должны установить значение по умолчанию для параметра примерно как

[1: "HIGH RISK", 2: "LOW RISK"]

В вашем коде у вас будет выражение вашего текстового поля (где risk_type - это поле поиска из базы данных):

$P{risk_types}.get($F{risk_type})

Для элементов, отсутствующих на карте, вы получите нулевое значение, я расширяю выражение текстового поля:

$P{risk_types}.get($F{risk_type}) ?: "UNDEFINED"

Ответ 5

Boolean.valueOf(!($P{accWise}.equals("AC" ) && $F{RQAC_ACCREJ}.equals("R"))) полезно использовать несколько условий в свойствах ireport.