DataTable JSF

Ola!

Estou utilizando o DataTable para mostrar uma lista de alunos.
Porem, esta DataTable nao deve ser carregada ao abrir o formulário, mas somente quando o usuario clicar no botão e disparar a consulta, passando os campos de filtro como parametro.
Ou seja, so executar o alunoBacking.getAlunos quando clicar no botao “Consulta”.
Como posso fazer isto?

Obrigada

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://myfaces.apache.org/tomahawk"prefix="t"%>



<h:form id="conteudo_corpo">
	<h:panelGrid columns="2" align="center">
		<h:outputText value="Consultar Aluno"/>
	</h:panelGrid>	   
   	<f:verbatim><br><br></f:verbatim>

	
	<h:panelGrid columns="1" align="center">
		<h:messages />
	</h:panelGrid>


	<h:panelGrid columns="2" align="center">
		<h:outputLabel value="Nome"></h:outputLabel>
		<h:inputText value="#{alunoBacking.nome_filtro}" tabindex="0" maxlength="60" size="60"></h:inputText>
		<h:outputLabel value="Plano"></h:outputLabel>
		<h:selectOneMenu value="#{alunoBacking.idPlano_filtro}" >
			<f:selectItems value="#{alunoBacking.planos_filtro}" />
		</h:selectOneMenu>
		<h:outputLabel value="Turma"></h:outputLabel>
		<h:selectOneMenu value="#{alunoBacking.idTurma_filtro}" >
			<f:selectItems value="#{alunoBacking.turmas_filtro}" />
		</h:selectOneMenu>
		<h:outputLabel value="Instrutor"></h:outputLabel>
		<h:selectOneMenu value="#{alunoBacking.idInstrutor_filtro}" required="true" >
			<f:selectItems value="#{alunoBacking.instrutores_filtro}" />
		</h:selectOneMenu>
	</h:panelGrid>
	<f:verbatim><br><br></f:verbatim>

	<h:panelGrid columns="2" align="center">
		<h:commandButton action="#{alunoBacking.getAlunos}" value="Consultar"  immediate="true"></h:commandButton>
		<h:commandButton action="voltar" value="Voltar" immediate="true"></h:commandButton>
	</h:panelGrid>	   
	<f:verbatim><br><br></f:verbatim>

	<t:dataTable var="alunos" id="table_alunos" rows="20" value="#{alunoBacking.alunos}" styleClass="tabela">
		<h:column > 
			<f:facet name="header" > 
				<h:outputText value="Nome" /> 
			</f:facet> 
			<t:commandLink value="#{alunos.nome}" action="#{alunoBacking.chamaVisualizar}" immediate="true">      	
				<t:updateActionListener property="#{alunoBacking.idAluno}" value="#{alunos.idAluno}" />
	        	</t:commandLink> 
		</h:column>  
	        <h:column> 
			<f:facet name="header"> 
				<h:outputText value="Renovar Plano" /> 
			</f:facet> 
			<t:commandLink id="ren_plano" action="#{alunoBacking.chamaRenovarPlano}" immediate="true">   
           		<t:graphicImage border="0" value="../images/om.gif"/>   	
				<t:updateActionListener property="#{alunoBacking.idAluno}" value="#{alunos.idAluno}" />
	        </t:commandLink>  
	    </h:column>    
		<h:column > 
			<f:facet name="header"> 
				<h:outputText value="Alterar" /> 
			</f:facet> 
			<t:commandLink id="alterar" action="#{alunoBacking.chamaAlterar}" immediate="true">   
           		<t:graphicImage border="0" value="../images/om.gif"/>   	
				<t:updateActionListener property="#{alunoBacking.idAluno}" value="#{alunos.idAluno}" />
	        </t:commandLink>  
	    </h:column >
	    <h:column >    
	        <f:facet name="header"> 
				<h:outputText value="Excluir" /> 
			</f:facet>  
			<t:commandLink id="excluir" action="#{alunoBacking.chamaExcluir}" immediate="true">  
           		<t:graphicImage border="0" value="../images/om.gif"/>   	
				<t:updateActionListener property="#{alunoBacking.idAluno}" value="#{aluno.idAluno}" />
	        </t:commandLink>   
		</h:column>
	</t:dataTable>  

	<t:dataScroller id="paginacao" for="table_alunos" fastStep="10" pageCountVar="pageCount" pageIndexVar="pageIndex"   
                styleClass="scroller" paginator="true" paginatorMaxPages="9" paginatorTableClass="paginator" paginatorActiveColumnStyle="font-weight:bold;">   
        	<f:facet name="first" >   
    			<t:outputText value="Primeira"/>   
	    	</f:facet>   
    		<f:facet name="last">   
		    	<t:outputText value="Última"/>   
    		</f:facet>   
    		<f:facet name="previous">   
  		    	<t:outputText value="Anterior"/>   
    		</f:facet>   
    		<f:facet name="next">   
        		<h:graphicImage url="imagens/arrow-next.gif" />
    		</f:facet>   
	</t:dataScroller>   
         <f:verbatim><br><br></f:verbatim>
</h:form>

um div escondido não resolveria?

O problema é como faço para refazer a consulta e atualizar o DataTable a cada vez que o usuário clica no botao.
Da forma como estou fazendo, colocando o getAlunos na action do botao, nao funciona…

utilize o atributo rendered="#{seuBean.algumaCoisaBoleana}" da dataTable.
pode ser o tamanho da lsta da dataTable > 1 por exemplo.
de uma procurada no forum que vc vai encontrar varios exemplos.

[]'s

oi sou cadastrado no forum a algum tempo, porem nao utilizava, agora estou voltando a utilizalo.
entao:
acho que seria isso que voce precisa.

<h:column>
<h:commandLink id=“alterar_aluno” action="#{alunoFaces.doAlteraAluno}">
<h:outputText value=“Alterar Aluno”/>
</h:commandLink>

</h:column>

DataModel AlunoDataModel=new ListDataModel();
Object[] obj=(Object[]) AlunoDataModel.getRowData();

utilize o getRowData() no hora que enviar o action ele pega o cara que voce clicou.
ai você pode tratar.

caso não seje bem isso, vc pode me explicar mais um pouco, ai vejo se tenho como lhe ajudar.

Alguém sabe que erro é esse:

exception 

javax.servlet.ServletException: -25
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:209)
	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)


root cause 

java.lang.IllegalArgumentException: -25
	javax.faces.component.UIData.setFirst(UIData.java:187)
	org.apache.myfaces.custom.datascroller.HtmlDataScroller.setFirst(HtmlDataScroller.java:252)
	org.apache.myfaces.custom.datascroller.HtmlDataScroller.broadcast(HtmlDataScroller.java:235)
	javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:267)
	javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:381)
	com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:75)
	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

vc colocou os .jar na tua lib?

[quote=ValeskaFCF]O problema é como faço para refazer a consulta e atualizar o DataTable a cada vez que o usuário clica no botao.
Da forma como estou fazendo, colocando o getAlunos na action do botao, nao funciona…
[/quote]

Coloque um action no seu botão que dispara um metodo no seu ManagedBean

Fala ai galera, sou novo no Java. Espero ajudar em algo.

Ja tentou inicializar no seu construtor do backingBean a List alunos como null e somente carregar a Lista ao clicar no consulta?

Abraco

Utilize a tag do tomahawk <t:dataTable> com a opção renderedIfEmpty=“false”, desta forma se o seu objeto collection estiver vazio não será renderizada a dataTable.

A minha ficou desta maneira:

          &lt;t:dataTable id="compras" value="#{ComprasFormBean.listCompras}"
                         var="item" styleClass="tabela" headerClass="cabecalho"
                         columnClasses="col_left,col_left,col_left,col_left, col_center, col_left, col_left, col_left, col_center, col_right, col_right, col_right"
                         renderedIfEmpty="false"&gt;

Faz o seguinte, na tag do teu datatable vc coloca
<h:dataTable rendered="#{not empty beanform.lista}"

Alguem tem a class que faz o datascroller funcionar?

Uso richfaces e não sei implementar o paginator…

Valeu