JSF 2 - Se a lista estiver vazia exibir Não Há Dados

Olá, preciso mostrar a mensagem “Não há dados para serem exibidos.” caso a lista esteja vazia, no programa, se a lista estiver vazia não chega
a mostrar o hearder pois uso a propriedade not empty… Mas como faço para mostrar uma mensagem? Dá para colocar um if aqui dentro?

[code]<h:body>

Publicação de Epub


<h:form>
<h:panelGrid columns=“0”>
<h:outputLabel value=“Pesquisa (Palavra-chave): " for=“campo-pesquisa” styleClass=“texto”></h:outputLabel>
<h:inputText id=“campo-pesquisa” value=”#{epubVersionamentoBean.voEpubVersionamento.searchContent}"
styleClass=“textoDoInputText” required=“true” validatorMessage=“Mínimo de 3 caracteres” requiredMessage=“Campo obrigatório”>
<f:validateLength minimum=“3” />
</h:inputText>
<h:message for=“campo-pesquisa” style=“color:red”></h:message>
		<h:commandButton image="imagem/pesquisa.gif">
			<f:ajax event="click" render="@form" execute="@form" listener="#{epubVersionamentoBean.executaProcessoPesquisa}"></f:ajax> 
		</h:commandButton>
	</h:panelGrid> 
	
	
	
	<h:panelGrid columns="4" rendered="#{not empty epubVersionamentoBean.voEpubVersionamentoList}" columnClasses="borda"> 
		<h:dataTable id="lista" value="#{epubVersionamentoBean.voEpubVersionamentoList}" var="resultadoPesquisa" rowClasses="OddRow, EvenRow">	
			<h:column>				
				<a href="xhtml/upload_epub.xhtml?#{resultadoPesquisa.ISBN_Livro_Impresso}"><img src="imagem/filtra.png"></img></a>
			</h:column>			
			<h:column headerClass="cabecalho">
				<f:facet name="header">
					<h:outputText value="Código Produto"></h:outputText>
				</f:facet>
				<a class="dados">#{resultadoPesquisa.codigo_produto}</a>
			</h:column>
			<h:column headerClass="cabecalho">
				<f:facet name="header">
					<h:outputText value="Autor"></h:outputText>
				</f:facet>
				<a class="dados">#{resultadoPesquisa.autor}</a>
			</h:column>
			<h:column headerClass="cabecalho">
				<f:facet name="header">
					<h:outputText value="ISBN"></h:outputText>
				</f:facet>
				<a class="dados">#{resultadoPesquisa.ISBN_Livro_Impresso}</a>
			</h:column>
			<h:column headerClass="cabecalho">
				<f:facet name="header">
					<h:outputText value="Título"></h:outputText>
				</f:facet>
				<a class="dados">#{resultadoPesquisa.titulo}</a>
			</h:column>
		</h:dataTable>
	</h:panelGrid> 
</h:form>

</h:body>[/code]

Você pode fazer o teste no seu controller… se a lista retornar vazia, exibe uma mensagem…

O <p:dataTable> do primefaces tem o atributo emptyMessage, que faz exatamente o que você quer.
Com <h:dataTable>, tente fazer assim

&lt;h:dataTable value="#{epubVersionamentoBean.voEpubVersionamentoList}"&gt; ... &lt;/h:dataTable&gt; &lt;h:outputText value="Não há dados para serem exibidos!" rendered="#{empty epubVersionamentoBean.voEpubVersionamentoList}" /&gt;

1 curtida

amigo, vii que você usou no datatable

para verificar se a lista não esta vazia, para poder então renderiza-la.

Tente utilizar um h:outputText com algo parecido com:

rendered="#{empty epubVersionamentoBean.voEpubVersionamentoList}"

ou

rendered="#{!not empty epubVersionamentoBean.voEpubVersionamentoList}"

Não sei se isso é possível e no momento não tenho como testar ou pesquisar, mas acredito que seja.
Desta forma, quando a lista não estiver vazia (not empty) irá exibir a tabela e qndo ela estiver vazia ira exibir a mensagem.

Abraços.

Oi gente, primeiramente obrigado a ajuda de todos, vou detalhar a questão:

  • Assim que a tela abre, vem um campo de pesquisa; OK

  • Assim que o usuário digita a palavra-chave e clica em pesquisar o que ele digitou servirá de parametro para pesquisa SELECT * FROM Tabela WHERE parametro OK

  • Neste momento se tiver dados eles irão aparecer OK

  • A questão é, e se não tiver dados, a lista for vazia, após clicar em pesquisar, daí sim mostrar “Não há dados…”

Assim que a tela abre não mostra o header pois estou usando

rendered="#{not empty epubVersionamentoBean.voEpubVersionamentoList}"

isto é, só mostra o dataTable caso haja dados na lista… porém se a consulta retornar uma lista vazia, gostaria dizer q não há dados, mas pra isso
o usuário deve clicar, a condição fica acredito q no clique né? Tipo:

1-digitou palavra-chave
2-efetua select where parametro
? tem dados ?
se sim mostra
senão “Não há dados pra serem exibidos”

Será algo nessa linha?

[quote]<h:commandButton image=“imagem/pesquisa.gif”>
<f:ajax event=“click” render="@form" execute="@form" listener="#{epubVersionamentoBean.executaProcessoPesquisa}"></f:ajax>
</h:commandButton> [/quote]

Fui claro? :smiley:

abraço,

Se eu entendi, ou você mostra a table ou mostra a mensagem. É isso?
Se for isso, use um outputText com rendered dinamico, controlado por um atributo boolean do managed bean.

&lt;h:outputText value="Não há dados para serem exibidos!" rendered="#{bean.exibeMsgListaVazia}" /&gt;Esse atributo será iniciado com false e não será exibido quando vc acessar a página.

public class Bean {
      private boolean exibeMsgListaVazia = false;
      // get / set
}

Quando clicar no botão pesquisar, se a lista estiver vazia você altera exibeMsgListaVazia para true;

public void pesquisar() {
      if(lista.isEmpty())  {
           exibeMsgListaVazia = true;
      }
}

quase…
:smiley:

só q pra isso preciso antes clicar no botão…

qdo. a tela aparece pela primeira vez… ela aparece sem nada… após o clique se tiver dados ele mostra e se não tiver dados deveria
neste momento mostrar a mensagem d q n há dados…

tendeu?

Entendi. Mas essa “solução” que eu passei faz exatamente isso.
Quando vc entrar na tela, o atributo que controla o rendered está com o valor = false, portanto, a mensagem não será exibida.
Quando vc clicar no botão pesquisar, vc faz um teste na lista. Se estiver vazia, você altera o atributo que controla o rendered para true e a mensagem é exibida. Se não estiver vazia, a tabela será renderizada e a mensagem não será exibida.

Testando…

[quote=finotti]Entendi. Mas essa “solução” que eu passei faz exatamente isso.
Quando vc entrar na tela, o atributo que controla o rendered está com o valor = false, portanto, a mensagem não será exibida.
Quando vc clicar no botão pesquisar, vc faz um teste na lista. Se estiver vazia, você altera o atributo que controla o rendered para true e a mensagem é exibida. Se não estiver vazia, a tabela será renderizada e a mensagem não será exibida.[/quote]

Na mosca! No ângulo!

Valeu mesmo FERA!

rs

xau,

Valeu a todos pela atenção…

Tranquilo… só coloca o [Resolvido] lá no título do post…

abraços!