Regras de navegação faces-config.xml

Boa tarde

Estou com problemas nas regras de navegação de um projeto que estou fazendo um jsf
estou navegando nas seguintes paginas:
pagina_principal.jsp > introducao_ex_1.jsp > exercicio_1_sel_img.jsp > exercicio_1_img_1.jsp
porem quando estou na pagina exercicio_1_img_1.jsp e clico com o botao voltar do browser,
volta para a pagina pagina_principal.jsp e não para a pagina exercicio_1_sel_img.jsp(que é a pagina anterior).
Eu fiz tudo pelo modo grafico no faces-config, e percebi que independente de qualquer
pagina que estou no brower sempre aparece referenciando a pagina principal,
mesmo se eu estiver em exercicio_1_img_1.jsp no browser aparece:
http://localhost:8080/teste/pagina_principal.jsf .
Alguem pode me ajudar ?

obrigada

vc usa qual JSF? 1.2 ou 2.0? se der posta o seu faces-config.xml aki…

estou usando jsf 1
segue algumas partes do codigo

<navigation-rule>
    <from-view-id>/pagina_principal.jsp</from-view-id>
    <navigation-case>
        <from-outcome>ex01</from-outcome>
        <to-view-id>/introducao_ex_1.jsp</to-view-id>
    </navigation-case>
</navigation-rule>

<navigation-rule>
    <from-view-id>/introducao_ex_1.jsp</from-view-id>
    <navigation-case>
        <from-outcome>passo01</from-outcome>
        <to-view-id>/exercicio_1_sel_img.jsp</to-view-id>
    </navigation-case>
</navigation-rule>
/exercicio_1_sel_img.jsp passo01 /exercicio_1_img_1.jsp

Gisele,

Seu ManagedBean está com qual escopo? (utilize a tag Code para colocar o codigo).
Tem como colocar o código do web.xml?

Até +!

oi, segue o web.xml

<?xml version="1.0" encoding="UTF-8"?> e-Denuncias javax.faces.CONFIG_FILES /WEB-INF/faces-config.xml javax.faces.STATE_SAVING_METHOD server org.richfaces.SKIN blueSky org.richfaces.CONTROL_SKINNING enable RichFaces Filter richfaces org.ajax4jsf.Filter createTempFiles false richfaces Faces Servlet REQUEST FORWARD INCLUDE Faces Servlet javax.faces.webapp.FacesServlet 1 Faces Servlet *.jsf index.jsp EntityManagerFilter EntityManagerFilter edenuncia.filter.EntityManagerFilter EntityManagerFilter /*

Gisele,

Como vc está usando para navegar entre as páginas, tipo, não está mapeando um Bean? Normalmente no faces-config.xml teríamos uma parte mais ou menos assim:

<managed-bean>
        <managed-bean-name>MeuBean</managed-bean-name>
        <managed-bean-class>Pacote.MinhaClasse</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope> //ou session
    </managed-bean>

E baseado na resposta de algum método deste Bean faríamos a navegação (como vc demonstrou):

<navigation-rule>
<from-view-id>/pagina_principal.jsp</from-view-id>
<navigation-case>
<from-outcome>ex01</from-outcome>
<to-view-id>/introducao_ex_1.jsp</to-view-id>
</navigation-case>
</navigation-rule> 

Não está faltando parte do código do faces-config.xml?

Até +!

(Obs.: coloque seu código entre as tags Code, fica em cima da caixa de texto onde você digita a mensagem, assim seu código fica mais legível)

pensei que não precisava colocar a parte do MB

segue inteiro

<?xml version="1.0"?>
    <managed-bean>
	<managed-bean-name>paginaPrincipal</managed-bean-name>
	<managed-bean-class>vendas.mb.PaginaPrincipalMB</managed-bean-class>
	<managed-bean-scope>session</managed-bean-scope>
</managed-bean>

    <managed-bean>
	<managed-bean-name>ex01selecioneImg</managed-bean-name>
	<managed-bean-class>vendas.mb.Exercicio01SelecioneImgMB</managed-bean-class>
	<managed-bean-scope>session</managed-bean-scope>
</managed-bean>

    <managed-bean>
	<managed-bean-name>introducaoEx01</managed-bean-name>
	<managed-bean-class>vendas.mb.IntroducaoEx01MB</managed-bean-class>
	<managed-bean-scope>session</managed-bean-scope>
</managed-bean>

     <managed-bean>
	<managed-bean-name>passo1ex1</managed-bean-name>
	<managed-bean-class>vendas.mb.Passo1ex1MB</managed-bean-class>
	<managed-bean-scope>session</managed-bean-scope>
</managed-bean>

    <managed-bean>
	<managed-bean-name>ex01selecioneImgPas2</managed-bean-name>
	<managed-bean-class>vendas.mb.Passo02SelecioneImgMB</managed-bean-class>
	<managed-bean-scope>session</managed-bean-scope>
</managed-bean>

     <managed-bean>
	<managed-bean-name>ex1passo1_2</managed-bean-name>
	<managed-bean-class>vendas.mb.Exercicio1Passo1_2MB</managed-bean-class>
	<managed-bean-scope>session</managed-bean-scope>
</managed-bean>


<navigation-rule>
    <from-view-id>/pagina_principal.jsp</from-view-id>
    <navigation-case>
        <from-outcome>ex01</from-outcome>
        <to-view-id>/introducao_ex_1.jsp</to-view-id>
    </navigation-case>
</navigation-rule>

<navigation-rule>
    <from-view-id>/introducao_ex_1.jsp</from-view-id>
    <navigation-case>
        <from-outcome>passo01</from-outcome>
        <to-view-id>/exercicio_1_sel_img.jsp</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>passo2</from-outcome>
        <to-view-id>/exercicio_1_sel_img_p2.jsp</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>passo3</from-outcome>
        <to-view-id>/exercicio_1_sel_img_p3.jsp</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>passo4</from-outcome>
        <to-view-id>/exercicio_1_sel_img_p4.jsp</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>passo5</from-outcome>
        <to-view-id>/exercicio_1_sel_img_p5.jsp</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>passo6</from-outcome>
        <to-view-id>/exercicio_1_sel_img_p6.jsp</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>passo8</from-outcome>
        <to-view-id>/exercicio_1_sel_img_p8.jsp</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>passo9</from-outcome>
        <to-view-id>/exercicio_1_sel_img_p9.jsp</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>passo7</from-outcome>
        <to-view-id>/exercicio_1_sel_img_p7.jsp</to-view-id>
    </navigation-case>
</navigation-rule>

<navigation-rule>
    <from-view-id>/exercicio_1_sel_img.jsp</from-view-id>
    <navigation-case>
        <from-outcome>passo01</from-outcome>
        <to-view-id>/exercicio_1_passo_1.jsp</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>passo02</from-outcome>
        <to-view-id>/exercicio_1_passo_2.jsp</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>passo03</from-outcome>
        <to-view-id>/exercicio_1_passo_3.jsp</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>passo04</from-outcome>
        <to-view-id>/exercicio_1_passo_4.jsp</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>passo05</from-outcome>
        <to-view-id>/exercicio_1_passo_5.jsp</to-view-id>
    </navigation-case>
</navigation-rule>
<navigation-rule>
    <from-view-id>/exercicio_1_passo_1.jsp</from-view-id>
    <navigation-case>
        <from-outcome>voltar</from-outcome>
        <to-view-id>/exercicio_1_sel_img.jsp</to-view-id>
    </navigation-case>
</navigation-rule>
<navigation-rule>
    <from-view-id>/exercicio_1_passo_5.jsp</from-view-id>
    <navigation-case>
        <from-outcome>voltar</from-outcome>
        <to-view-id>/exercicio_1_sel_img.jsp</to-view-id>
    </navigation-case>
</navigation-rule>
<navigation-rule>
    <from-view-id>/exercicio_1_passo_4.jsp</from-view-id>
    <navigation-case>
        <from-outcome>voltar</from-outcome>
        <to-view-id>/exercicio_1_sel_img.jsp</to-view-id>
    </navigation-case>
</navigation-rule>
<navigation-rule>
    <from-view-id>/exercicio_1_passo_3.jsp</from-view-id>
    <navigation-case>
        <from-outcome>voltar</from-outcome>
        <to-view-id>/exercicio_1_sel_img.jsp</to-view-id>
    </navigation-case>
</navigation-rule>
<navigation-rule>
    <from-view-id>/exercicio_1_passo_2.jsp</from-view-id>
    <navigation-case>
        <from-outcome>voltar</from-outcome>
        <to-view-id>/exercicio_1_sel_img.jsp</to-view-id>
    </navigation-case>
</navigation-rule>

Gisele,

Vc tem muitos ManagedBeans. Porque não usa um só para controlar a navegação?

Bem mesmo assim não achei nada errado no faces-config.xml. Aparecer o nome da primeira página no browser é normal (só aparece a outra URL se vc configurar para redirecionar, mas assim não executa a lógica do bean).

Você está usando qual browser? Já tentou com outro? já olhou também se em algum dos seus Beans vc não está limpando a sessão? ex:

        FacesContext context = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
        session.invalidate();

se estiver, é por isso que volta desde o início.

Também percebi que vc tem esta regra nas páginas:

<from-outcome>voltar</from-outcome> 

Ela não está funcionando?

Até +!

eu não estou limpando a sessao nos meus MB, sera que é por causa disso?
eu estou testando com o firefox, provavelmente é o navegador que o cliente vai usar…
o botão voltar esta somente um uma das telas, para voltar no restante das telas eu estava contando
com o voltar do browser :S.
Será que se eu configurar para mostrar o nome da cada pagina que navegar no
browser ao invés de ficar sempre como pagina principal resolve?

obrigada

Gisele,

Limpar a sessão seria somente para voltar ao início com o mesmo Bean, só que sem valores armazenados! O que vc pode tentar também é colocar os Beans com escopo request e fazer o teste.

Eu tenho uma aplicação aqui que não apresenta este problema, inclusive com firefox. Quando clico tanto no voltar do browser quanto no botão voltar, volta página por página. Faz um teste com outro browser também.

Pelo que entendi vc tem 4 Beans, um inicializa em cada página?

Teria como vc colocar o código de algumas das páginas? por exemplo, das duas últimas exercicio_1_sel_img.jsp e exercicio_1_img_1.jsp

Até +!

como mudo o escopo pra request?
segue o codigo, vou colar só o pedaço do codigo que faz a chamada
introducao_ex_1.jsp

   <h:panelGrid  style="text-align: left;">
                <a4j:commandLink action="#{introducaoEx01.passo01}" reRender="mainPanel">
                       <h:graphicImage style="border:0" value="images/seta.png" height="30px" />
                       <h:outputText value="Densidade radiográfica da lesão ? Passo 1;" style="font-size:15px" />
               </a4j:commandLink>
 </h:panelGrid>

IntroducaoEx01MB.java

public class IntroducaoEx01MB {

    public String passo01(){
        return "passo01";
    }
}

faces-config.xml

 <navigation-case>
            <from-outcome>passo01</from-outcome>
            <to-view-id>/exercicio_1_passo_1.jsp</to-view-id>
  </navigation-case>

e assim continua a navegação…

Tenta colocando redirect na sua regra de navegação.

&lt;navigation-case&gt;  
           &lt;from-outcome&gt;passo01&lt;/from-outcome&gt;  
           &lt;to-view-id&gt;/exercicio_1_passo_1.jsp&lt;/to-view-id&gt;  
           &lt;redirect&gt;true&lt;/redirect&gt;
&lt;/navigation-case&gt;

funcionou!!! obrigada :wink:
mas em outros sistemas que eu fiz, não me lembro de ter que colocar a tag redirect…
pode me explicar pq tive que colocar nesse?
obrigada :smiley:

Gisele,

Que bom que funcionou! Mas tenha cuidado para não usar redirect sempre. Tem um artigo excelente do Rafael Pontes que explica a diferença:

http://www.rponte.com.br/2008/07/12/repitam-comigo-redirect-nao-e-forward/

Até +!

Obs.: Não esquece de colocar RESOLVIDO no tópico.

Colocando o redirect você só estará afirmando que ao ser executado uma regra de navegação
a mesma deverá ser redirecionada… Diferente de quando você usa as requisições em ajax(assincrona).

E como o link citado pelo vinnysoft, se você usar o redirect perderar seus dados. O que direfe o forward.