Ocultar/Mostrar linhas no jasperreports por definição de um parâmetro de entrada

Tenho o parametro $P{ordenadorDespesa}, que pode vir nulo ou vazio ou preenchido. Preciso mostrar no relatório quando este vier preenchido e quando não for esconder a linha
Tentei das duas formas, mas nenhuma deu certo
1-

<staticText>
<reportElement x="3" y="83" width="137" height="20" uuid="ffb97e30-9c11-4674-b8ee-7c9426687d9b">
<printWhenExpression><![CDATA[$P{ordenadorDespesa} != null]]></printWhenExpression>
</reportElement>
<textElement>
<font fontName="SansSerif" isBold="true"/>
</textElement>
<text><![CDATA[Ordenador de Despesa:]]></text>
</staticText>

2-

<staticText>
<reportElement x="1" y="83" width="139" height="20" uuid="ffb97e30-9c11-4674-b8ee-7c9426687d9b">
<printWhenExpression><![CDATA[!$P{ordenadorDespesa}.equals( null )]]></printWhenExpression>
</reportElement>
<textElement>
<font fontName="SansSerif" isBold="true"/>
</textElement>
<text><![CDATA[Ordenador de Despesa:]]></text>
</staticText>

Não seria apenas marcar na propriedades do parâmetro “Blank When null”?

Não achei esta opção.

Não é o campo parâmetro e sim um label.

As linhas estao vindo do banco ou alguma fonte de dados? Se estao, é mais eficiente e prático esse parametro/condição ficar na query da fonte de dados.

Estão sendo passados por parâmetro. Não tem consulta em banco no relatório.

Como é a mágica? De onde vem essas linhas que não podem ser filtradas antes de serem passadas pro relatório? Não precisa ser banco de dados para conseguir filtrar o necessário.

Não entendi o que disse.

É isto: <parameter name="ordenadorDespesa" class="java.lang.String"/> ?

Se você tem linhas no seu relatório que precisam ser escondidas ou não como você falou, em algum momento essas linhas são passadas para o relatório. Se algumas linhas devem ou não ser exibidas dependendo de alguma condição, então filtra antes de passar pro relatório.

Porque não posso passar nulo ?

Pode.
Mas aí você está definindo lógica num relatório. Lógicas nunca devem estar nos relatórios.

Não posso porque ?
O mesmo relatório pode ser mostrado de formas diferentes e acho que esta lógica deve estar no relatório.
Se não como faria ?

Por que insistir em fazer gambiarra? Isso não é responsabilidade do documento a ser gerado, é da parte que faz o acesso a dados, seja lá qual for a fonte de dados, banco, List em memória, etc. Relatório é apresentação, como se fosse uma tela.

Você faria:

  • Se está usando um banco de dados como datasource, diretamente na query. Afinal, a regra a ser aplicada pode ser inserida na consulta.
  • Se usa uma collection como datasource, então filtra-se antes de montar a coleção.