AutoBoxing e Expression Language

Hoje descobri mais um problema relacionado ao mecanismo de Expression Languages (EL) do Tomcat. Todos nós sabemos que para que uma propriedade seja corretamente utilizada em EL, ela necessariamente precisa ser declarada na classe como isXXX() ou getXXX(). Por exemplo, suponha uma classe Equipmento, como abaixo:


public class Equipamento {

public boolean isAtivo() {
return isEquipamentoAtivo;
}

public boolean getNumeroIP() {
return numeroIP;
}
}

Como os métodos que retornam precisam iniciar com ‘is’ (exclusivos para boolean) e ‘get’ para que funcionem corretamente em EL (e por boas práticas também), os exemplos acima já estão formatados de acordo com o adequado.

Suponha que esta mesma classe, foi adicionada a uma variável JSTL de nome equipamentoPrincipal. Para que pudéssemos invocar os métodos isAtivo() e getNumeroIP(), repectivamente, precisaríamos suprimir as letras iniciais ‘is’ e ‘get’, respecitvamente. Ficaria algo mais ou menos assim (tags html apenas para efeito de demonstração):

<html>

<font color=green> Equipamento está OK <b> ${equipamentoPrincipal.ativo}</b></font>

<font color=green> Número IP do Equipamento <b> ${equipamentoPrincipal.numeroIP}</b></font>

</html>

OK, partindo deste princípio e sabendo que a partir da versão 5 do Java, contamos com a facilidade do AutoBoxing ,  seria de se imaginar que caso eu declarasse o retorno do método isAtivo como Boolean (wrapper), meu EL  poderia funcionar corretamente.  Errado! Ocorre um erro em Runtime indicando que a propriedade não pode ser encontrada. Algo do tipo “Property ‘ativo’ not found on type package.path.Equipamento“. Provavelmente o interpretador EL do JSP não está adequado à gambi feita pela galera da SUN para adicionar o AutoBoxing ao JAVA….

Deixe um comentário