XHTML. Onde muda de página?

Pessoal, sou iniciante em j2ee e peguei uma aplicação pronta e sai customizando. Até um certo momento eu sei o que faz, mas em outros não, que foi uma dúvida que surgiu. Tenho meu arquivo.xhtml, mas só tenho um e ele tem varias paginas. Explicando melhor:

  1. Tem a página que aparece a grid retornando dados do banco;
  2. Tem um botão novo que ao clicar só aparece um formulário para cadastrar novos dados e a grid já não aparece mais.

Quero entender como isso acontece, de clicar em um botão e ele ir só para o form, de clicar em outro e ir só para a grid… QUERO SABER COMO FUNCIONA!

Para via das dúvidas ai está o xhtml:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"       
	  xmlns:h="http://java.sun.com/jsf/html"
	  xmlns:f="http://java.sun.com/jsf/core"	  
	  xmlns:p="http://primefaces.org/ui" 
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <ui:composition template="/templates/default.xhtml">
        <ui:param name="titulo" value="#{msg['produto.panel.header.geral']}"/>
        <ui:define name="conteudo">        
            <p:outputPanel id="opPrincipal" autoUpdate="false">
                <p:panel id="pnlPrincipal"                      
                         header="#{produtoBean.mensagemHeader}" 
                         footer="#{produtoBean.mensagemFooter}">                    
                    <h:form id="frmProdutoEditaDados" prependId="false">                    	
                        <p:outputPanel id="opEditaDados"								   
                                       rendered="#{produtoBean.editaDados}">
                            <p:messages id="msgEditaDados" 
                                        rendered="#{produtoBean.mostraMensagemEditaDados}"
                                        globalOnly="true"/>
                            <h:panelGrid id="pgProduto"
                                         styleClass="panelGrid"
                                         columns="2"
                                         cellpadding="3"
                                         cellspacing="3"
                                         columnClasses="columnLabel30,columnInput70">
                                
                                <h:outputLabel value="* #{msg['produto.descricao']}:"/>
                                <h:panelGroup>
                                    <p:inputText id="inpDescricao"
                                                 value="#{produtoBean.descricao}"
                                                 maxlength="100"
                                                 size="90"/>
                                    <p:message for="inpDescricao" display="text"/>
                                </h:panelGroup>
                                
                                <h:outputLabel value="* #{msg['produto.unidadeMedida']}:"/>
                                <h:panelGroup>
                                    <h:selectOneMenu id="inpUnidade"
                                                     value="#{produtoBean.unidade}">
                                        <f:selectItems value="#{applicationBean.listUnidadeMedida}"/>
                                    </h:selectOneMenu>
                                    <p:message for="inpUnidade" display="text"/>
                                </h:panelGroup>
                                
                                <h:outputLabel value="* #{msg['produto.kg']}:"/>
                                <h:panelGroup>                                    
                                    <p:inputText id="inpKg"
                                                 value="#{produtoBean.kg}"
                                                 maxlength="5"
                                                 size="3"
                                                 onkeypress="return SomenteNumero(event)"/>
                                    <p:message for="inpKg" display="text"/>                                    
                                </h:panelGroup>
                                                              
                                <h:panelGroup/>
                                <h:panelGroup>
                                        <p:commandButton id="btnSalvar"
                                                         icon="ui-icon-disk"
                                                         value="#{msg['button.salvar']}"
                                                         title="#{msg['button.salvar.title']}"
                                                         accesskey="#{msg['button.salvar.accesskey']}"
                                                         onclick="jQuery(this).attr('disabled', true);"
                                                         oncomplete="jQuery(this).attr('disabled', false); jQuery('#dtProduto\\:clmDescricao_filter').focus(); jQuery('#inpDescricao').focus();"
                                                         action="#{produtoBean.salvar}"
                                                         styleClass="button100"                                                  											 
                                                         update=":opPrincipal"/>
                                        <span style="padding-left:3px;"/>
                                        <p:commandButton id="btnCancelar"
                                                         icon="ui-icon-cancel"
                                                         value="#{msg['button.cancelar']}"
                                                         title="#{msg['button.cancelar.title']}"
                                                         accesskey="#{msg['button.cancelar.accesskey']}"
                                                         oncomplete="jQuery('#dtProduto\\:clmDescricao_filter').focus();"
                                                         action="#{produtoBean.cancelar}"
                                                         styleClass="button100"
                                                         update=":opPrincipal"/>
                                </h:panelGroup>
                            </h:panelGrid>
                        </p:outputPanel>				
                    </h:form>
                    <h:form id="frmProdutoGeral" prependId="false">                        
                        <p:outputPanel id="opGeral"                                       
                                       rendered="#{!produtoBean.editaDados}">
                            <p:messages id="msgGeral" rendered="#{produtoBean.mostraMensagemGeral}"/>
                            <h:panelGrid styleClass="panelGridBarraFerramenta100"
                                         cellpadding="0"
                                         cellspacing="0"
                                         columns="2"
                                         columnClasses="panelGridColumnLeft50,panelGridColumnRight50">
                                <p:commandButton id="btnNovoSuperior"
                                                 icon="ui-icon-document"
                                                 value="#{msg['button.novo']}"
                                                 title="#{msg['button.novo.title']}"
                                                 accesskey="#{msg['button.novo.accesskey']}"
                                                 oncomplete="jQuery('#inpDescricao').focus();"
                                                 action="#{produtoBean.incluir}"
                                                 styleClass="button100"
                                                 update=":opPrincipal"/>
                                <p:commandButton id="btnRecarregarSuperior"
                                                 icon="ui-icon-arrowrefresh-1-e"
                                                 value="#{msg['button.recarregar']}"
                                                 title="#{msg['button.recarregar.title']}"
                                                 accesskey="#{msg['button.recarregar.accesskey']}"
                                                 onclick="jQuery('#dtProduto\\:clmDescricao_filter').attr('value','');
                                                          jQuery('#dtProduto\\:clmUnidade_filter').attr('value','');
                                                          jQuery('#dtProduto\\:clmKg_filter').attr('value','');"
                                                 oncomplete="jQuery('#dtProduto\\:clmDescricao_filter').focus();"
                                                 action="#{produtoBean.init}"
                                                 styleClass="button100"
                                                 update=":opPrincipal"/>
                            </h:panelGrid>
                            <p:dataTable id="dtProduto"                            			                                       
                                         style="padding-top:10px;padding-bottom:10px;"								 
                                         styleClass="dataTable"
                                         var="produto"
                                         value="#{produtoBean.listProduto}"
                                         paginator="true"							 
                                         paginatorTemplate="#{cfg['dataTable.paginatorTemplate']}"
                                         currentPageReportTemplate="#{cfg['dataTable.currentPageReportTemplate']}"									 
                                         rows="20"
                                         rowsPerPageTemplate="#{cfg['dataTable.rowsPerPageTemplate']}"									 
                                         rowStyleClass="#{empty rowId or rowId mod 2 ne 0 ? 'evenRow' : 'oddRow'}"
                                         rowIndexVar="rowId"
                                         emptyMessage="#{msg['datatable.empty']}">
                                <p:column id="clmEditar"
                                		  styleClass="dtProdutoAcao">
                                    <p:commandLink id="lnkEditar"
                                    			   title="#{msg['button.editar']}"
                                                   oncomplete="jQuery('#inpDescricao').focus();"
                                                   action="#{produtoBean.editar}"
                                                   update=":opPrincipal">
                                        <p:graphicImage value="/resources/imagens/editar.png"/>
                                        <f:setPropertyActionListener value="#{produto}"
                                                                     target="#{produtoBean.produto}"/>
                                    </p:commandLink>
                                    <p:spacer width="10"/>
                                    <p:commandLink id="lnkRemover"
                                    			   title="#{msg['button.remover']}"                                    			                                 
                                                   oncomplete="confirmarRemoverRegistro.show();
                                                               jQuery('#btnConfirmarRemoverRegistroNao').focus();"
                                                   update=":opPrincipal">
                                        <p:graphicImage value="/resources/imagens/remover.png"/>
                                        <f:setPropertyActionListener value="#{produto}"
                                                                     target="#{produtoBean.produto}"/>
                                    </p:commandLink>
                                </p:column>
                                <p:column id="clmDescricao"
                                          sortBy="#{produto.descricao}"
                                          filterBy="#{produto.descricao}"
                                          filterMatchMode="contains"
                                          filterStyle="width:65%"
                                          styleClass="dtProdutoDescricao">
                                    <f:facet name="header">
                                       <h:outputText value="#{msg['produto.descricao']}"/>
                                    </f:facet>
                                    <h:outputText value="#{produto.descricao}"/>                        
                                </p:column>
                                <p:column id="clmUnidade"
                                          sortBy="#{produto.unidade.descricao}"
                                          filterBy="#{produto.unidade.descricao}"
                                          filterMatchMode="contains"
                                          filterStyle="width:25%"
                                          styleClass="dtProdutoUnidade">
                                    <f:facet name="header">
                                       <h:outputText value="#{msg['produto.unidadeMedida']}"/>
                                    </f:facet>
                                    <h:outputText value="#{produto.unidade.descricao}"/>                        
                                </p:column>
                                <p:column id="clmKg"
                                          sortBy="#{produto.kg}"
                                          filterBy="#{produto.kg}"
                                          filterMatchMode="contains"
                                          filterStyle="width:20%"
                                          styleClass="dtProdutoKg">
                                    <f:facet name="header">
                                       <h:outputText value="#{msg['produto.kg']}"/>
                                    </f:facet>
                                    <h:outputText value="#{produto.kg}"/>                        
                                </p:column>
                            </p:dataTable>
                            <h:panelGrid styleClass="panelGrid100"
                                         cellpadding="0"
                                         cellspacing="0"
                                         columns="2"
                                         columnClasses="panelGridColumnLeft50,panelGridColumnRight50">
                                <p:commandButton id="btnNovoInferior"
                                                 icon="ui-icon-document"
                                                 value="#{msg['button.novo']}"
                                                 title="#{msg['button.novo.title']}"                                             
                                                 oncomplete="jQuery('#inpDescricao').focus();"
                                                 action="#{produtoBean.incluir}"
                                                 styleClass="button100"
                                                 update=":opPrincipal"/>
                                <p:commandButton id="btnRecarregarInferior"
                                                 icon="ui-icon-arrowrefresh-1-e"
                                                 value="#{msg['button.recarregar']}"
                                                 title="#{msg['button.recarregar.title']}"
                                                 onclick="jQuery('#dtProduto\\:clmDescricao_filter').attr('value','');
                                                	      jQuery('#dtProduto\\:clmUnidade_filter').attr('value','');
                                                          jQuery('#dtProduto\\:clmKg_filter').attr('value','');"                                                 
                                                 oncomplete="jQuery('#dtProduto\\:clmDescricao_filter').focus();"
                                                 action="#{produtoBean.init}"
                                                 styleClass="button100"
                                                 update=":opPrincipal"/>
                            </h:panelGrid>
                        </p:outputPanel>                       
                        <p:confirmDialog id="dlgConfirmarRemoverRegistro"
                                         header="#{msg['geral.confirmar.remover.registro.header']}" 
                                         message="#{msg['geral.confirmar.remover.registro']} #{produtoBean.produto.descricao} ?"
                                         severity="alert" 
                                         modal="true"
                                         widgetVar="confirmarRemoverRegistro">  
                            <p:commandButton id="btnConfirmarRemoverRegistroSim"                                             
                                             value="#{msg['geral.sim']}"
                                             update=":opPrincipal"
                                             oncomplete="jQuery('#dtProduto\\:clmDescricao').click();
                                             			 jQuery('#dtProduto\\:clmDescricao_filter').focus();
                                                         confirmarRemoverRegistro.hide();"
                                             actionListener="#{produtoBean.remover}"/>  
                            <p:commandButton id="btnConfirmarRemoverRegistroNao"                                             
                                             value="#{msg['geral.nao']}"                                             
                                             onclick="confirmarRemoverRegistro.hide();"
                                             oncomplete="jQuery('#dtProduto\\:clmDescricao_filter').focus()"/>
                        </p:confirmDialog>                        
                    </h:form>
                </p:panel>
            </p:outputPanel>
        </ui:define>
    </ui:composition>
</html>

Agradeço desde já pela força.

Esse é um padrão chamado navegação orientada á estados,bastante comum quando se trabalha com JSF.

Esse texto explica melhor:http://www.rponte.com.br/2008/04/10/utilizando-ajax-com-jsf-de-maneira-eficiente/

Obrigado amigo. Irei verificar o link.
:smiley: