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

11 respostas
A

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?

<h:body>
	<h1 class="cabecalho">Publicação de Epub</h1>
	<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>

11 Respostas

L

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

F

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;

G

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.

A

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?

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

Fui claro? :smiley:

abraço,

F

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;
      }
}
A

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?

F

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.

A

Testando…

A

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.

Na mosca! No ângulo!

Valeu mesmo FERA!

rs

xau,

A

Valeu a todos pela atenção…

L

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

abraços!

Criado 3 de fevereiro de 2011
Ultima resposta 3 de fev. de 2011
Respostas 11
Participantes 4