Muitos componentes JSF, como os do Tomahawk, por exemplo, possuem o atributo rendered
. Este atributo, como diz o nome, indica se o componente será renderizado ou não. No valor deste atributo, é possível utilizar expressões JSF EL; desta forma, a lógica que indicará se o elemento será exibido ou não pode (e deve) ser transferida para um Managed Bean. Isso permite que evitemos colocar muita lógica nos XHTMLs, deixando-os mais limpos e organizados.
Porém, em determinados momentos, precisamos fazer a renderização condicional de elementos que os componentes JSF não oferecem. Uma possível solução seria inserir este elemento num <t:div>
, por exemplo, pois este componente do Tomahawk possui o atributo rendered
. Porém, estaríamos criando um <div>
em torno do elemento desejado sem necessidade. O melhor neste caso seria utilizar o componente [
O <t:htmlTag>
possui um atributo value
que define a tag HTML que será renderizada em seu lugar, caso o atributo rendered
seja igual a true
. Se o value
for vazio, ele não criará nenhuma tag adicional; assim, o <t:htmlTag>
servirá somente para a renderização condicional de tudo o que estiver dentro deste componente.
Atenção: o atributo value
é obrigatório; se você omití-lo, o componente não funcionará! Para que ele não gere nenhuma tag, é necessário definir value=""
, como no exemplo abaixo:
<t:htmlTag rendered="#{tipo.exibeDescricao}" value="">
<div id="divDescricao_#{tipo.id}">
<h:outputText value=" #{messages.descricao}" />
<h:inputTextarea styleClass="inputAreaTexto" id="descricao" value="#{descricaoTipo}" />
</div>
</t:htmlTag>