Pergunta

Usado para desenvolver portlets e JPS de, assim que tem um dilema.

tarefa: exibição <h:dataTable> apenas quando a lista não está vazia

É possível fornecer tag <c:if> para JSF página?

Foi útil?

Solução

Sim, você pode adicionar tags JSTL em suas páginas JSF. No entanto, no seu caso, você pode simplesmente fazer o seguinte:

<h:dataTable value="#{myBean.list}"... rendered="#{myBean.displayTable}">
    ...
</h:dataTable>

com o seguinte método em myBean:

public boolean isDisplayTable() {
    return list != null && list.size() > 0;
}

Você também pode tentar isso (não tenho certeza se ele vai trabalhar):

<!-- Idea from Colin Gislason -->
<h:dataTable value="#{myBean.list}"... rendered="#{not empty myBean.list}">
    ...
</h:dataTable>

<h:dataTable value="#{myBean.list}"... rendered="#{not myBean.list.empty}">
    ...
</h:dataTable>

Note que você pode usar o ! em vez da palavra-chave not nas expressões EL (veja um guia aqui sobre expressões EL), que resulta em rendered="#{!empty myBean.list}".

Outras dicas

<c:if> (e outras tags JSTL) pode ser usado em JSF na maioria dos casos. No entanto, o não pode ser usado dentro de componentes que iterate em coleções - como <h:dataTable>. Mas no seu caso, você quer o exterior <c:if>, por isso é possível. No entanto, como romaintaz apontou, é melhor usar o atributo rendered.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top