Похоже, что движок инициализирует атрибут фрейма, используя первую запись из источника данных и используя это начальное значение для всех остальных записей (2-я итерация из набора результатов, 3-я итерация и т. д.). Вероятно, это ошибка библиотеки JasperReports.
Проблему можно решить с помощью нескольких обходных путей.
Временное решение 1. Использование условного стиля
Введение условного стиля решает проблему. Если у нас есть N уникальных значений цветов, мы должны добавить по крайней мере N - 1<28033236 для одного условия цвета>6><28033536 для одного условия цвета .
Рабочий пример. Источник данных
Я использовал источник данных на основе csv для отчета о тестировании:
team1,team2,color1,color2,duration_color,date
BEL,POR,#0000FF,#7F8C8D,#FFFFFF,"27 June"
ITA,AUT,#0000FF,#7F8C8D,#F2F3F4,"26 June"
FRA,SUI,#7F8C8D,#0000FF,#F6DDCC,"28 June"
CRO,ESP,#7F8C8D,#0000FF,#F2F3F4,"28 June"
SWE,UKR,#7F8C8D,#0000FF,#F2F3F4,"29 June"
ENG,GER,#0000FF,#7F8C8D,#FFFFFF,"29 June"
NED,CZE,#7F8C8D,#0000FF,#FFFFFF,"27 June"
WAL,DEN,#7F8C8D,#0000FF,#FFFFFF,"26 June"
Первая строка в файле содержит имена столбцов и должна быть пропущена (например, с помощью настроек адаптера данных).
This file contains 3 unique colors (the field duration_color) that will be used as background color.
Рабочий пример. Шаблон отчета
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Backcolor, W1" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="colors"/>
<style name="frameStyle">
<conditionalStyle>
<conditionExpression><![CDATA["#FFFFFF".equals($F{duration_color})]]></conditionExpression>
<style/>
</conditionalStyle>
<conditionalStyle>
<conditionExpression><![CDATA["#F2F3F4".equals($F{duration_color})]]></conditionExpression>
<style/>
</conditionalStyle>
<conditionalStyle>
<conditionExpression><![CDATA["#F6DDCC".equals($F{duration_color})]]></conditionExpression>
<style/>
</conditionalStyle>
</style>
<field name="team1" class="java.lang.String"/>
<field name="team2" class="java.lang.String"/>
<field name="color1" class="java.lang.String"/>
<field name="color2" class="java.lang.String"/>
<field name="duration_color" class="java.lang.String"/>
<field name="date" class="java.lang.String"/>
<detail>
<band height="20">
<frame>
<reportElement style="frameStyle" mode="Opaque" x="172" y="0" width="250" height="20">
<propertyExpression name="net.sf.jasperreports.style.backcolor"><![CDATA[$F{duration_color}]]></propertyExpression>
</reportElement>
<textField>
<reportElement x="0" y="0" width="100" height="20"/>
<textElement textAlignment="Left" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[String.format("Match date: %s", $F{date})]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="0" width="60" height="20">
<propertyExpression name="net.sf.jasperreports.style.forecolor"><![CDATA[$F{color1}]]></propertyExpression>
</reportElement>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$F{team1}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="160" y="0" width="30" height="20"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[vs]]></text>
</staticText>
<textField>
<reportElement x="190" y="0" width="60" height="20">
<propertyExpression name="net.sf.jasperreports.style.forecolor"><![CDATA[$F{color2}]]></propertyExpression>
</reportElement>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$F{team2}]]></textFieldExpression>
</textField>
</frame>
</band>
</detail>
<summary>
<band height="50">
<staticText>
<reportElement mode="Opaque" x="20" y="0" width="100" height="20" backcolor="#F2F3F4"/>
<text><![CDATA[Extra time]]></text>
</staticText>
<staticText>
<reportElement mode="Opaque" x="20" y="20" width="100" height="20" backcolor="#F6DDCC"/>
<text><![CDATA[Penalty shootout]]></text>
</staticText>
</band>
</summary>
</jasperReport>
Три условных стиля были введены в frameStyle, и этот стиль применяется ко всему кадру.
Рабочий пример. Выходной результат
Я использовал Jaspersoft Studio (JSS) для создания выходного результата.

Временное решение 2. Применение атрибутов к элементам, а не к фрейму
Другой обходной путь заключается в применении атрибута net.sf.jasperreports.style.backcolor ко всем элементам (textField и staticText) вместо использования атрибута фрейма.
Рабочий пример. Шаблон отчета
В этом случае нет необходимости вводить условный стиль.
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Backcolor, W2" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="colors"/>
<field name="team1" class="java.lang.String"/>
<field name="team2" class="java.lang.String"/>
<field name="color1" class="java.lang.String"/>
<field name="color2" class="java.lang.String"/>
<field name="duration_color" class="java.lang.String"/>
<field name="date" class="java.lang.String"/>
<detail>
<band height="20">
<frame>
<reportElement x="172" y="0" width="250" height="20"/>
<textField>
<reportElement mode="Opaque" x="0" y="0" width="100" height="20"/>
<textElement textAlignment="Left" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[String.format("Match date: %s", $F{date})]]></textFieldExpression>
</textField>
<textField>
<reportElement mode="Opaque" x="100" y="0" width="60" height="20">
<propertyExpression name="net.sf.jasperreports.style.forecolor"><![CDATA[$F{color1}]]></propertyExpression>
<propertyExpression name="net.sf.jasperreports.style.backcolor"><![CDATA[$F{duration_color}]]></propertyExpression>
</reportElement>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$F{team1}]]></textFieldExpression>
</textField>
<staticText>
<reportElement mode="Opaque" x="160" y="0" width="30" height="20">
<propertyExpression name="net.sf.jasperreports.style.backcolor"><![CDATA[$F{duration_color}]]></propertyExpression>
</reportElement>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[vs]]></text>
</staticText>
<textField>
<reportElement mode="Opaque" x="190" y="0" width="60" height="20">
<propertyExpression name="net.sf.jasperreports.style.forecolor"><![CDATA[$F{color2}]]></propertyExpression>
<propertyExpression name="net.sf.jasperreports.style.backcolor"><![CDATA[$F{duration_color}]]></propertyExpression>
</reportElement>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$F{team2}]]></textFieldExpression>
</textField>
</frame>
</band>
</detail>
<summary>
<band height="50">
<staticText>
<reportElement mode="Opaque" x="20" y="0" width="100" height="20" backcolor="#F2F3F4"/>
<text><![CDATA[Extra time]]></text>
</staticText>
<staticText>
<reportElement mode="Opaque" x="20" y="20" width="100" height="20" backcolor="#F6DDCC"/>
<text><![CDATA[Penalty shootout]]></text>
</staticText>
</band>
</summary>
</jasperReport>
Даже рамку можно снять.
Рабочий пример. Выходной результат
Результат, сгенерированный в JSS, абсолютно такой же:
