1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Redirecionamento de Paginas com JSF

Fala galera, to com um probleminha num sistema que estou desenvolvendo:

Eu preciso que o meu ManagedBean redirecione para uma página após inserir meus dados no Banco, eu configurei o meu faces-config.xml mas não acontece nada, ele simplesmente salva mas não muda de página, alguem pode me ajudar?

Faces-Config

<?xml version="1.0" encoding="UTF-8"?>
<faces-config
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
    version="2.2">


    <navigation-rule>  
        <from-view-id>/pages/comercial/*</from-view-id>  
        <navigation-case>  
            <from-outcome>novoPedido</from-outcome>  
            <to-view-id>/pages/comercial/venda/novoPedido.xhtml</to-view-id>  
            <redirect />
        </navigation-case>  
    </navigation-rule>

</faces-config>

ManagedBean(ViewScoped)

public String salvar(){
        try{

            if(validaDados()){

                this.revendedor.setPessoaFisica(this.pessoaFisica);
                this.revendedor.setFichaCadastral(processaArquivo());
                this.pessoaFisica.setCodEstadoCivil(estadoCivilSelecionado.getCodigo());
                this.revendedor.setCodigoPai(revendedorPai.getCodigo());
                this.contaBancaria.setBanco(this.bancoSelecionado);

                RevendedorDao dao = new RevendedorDao();
                Revendedor retorno = dao.inserir(this.revendedor);
                this.revendedor = retorno;

                //INSERE A CONTA BANCARIA
                contaBancaria.setTitular(revendedor);
                new ContaBancariaDao().inserir(contaBancaria);

                //INSERE O REGISTRO NA TABELA GENEALOGIA
                dao.inserirGenealogia(revendedor);

                //INSERE OS FILHOS CASO TENHAM SIDO PREENCHIDOS
                if(this.listaFilhos.size() > 0){
                    FilhoRevendedorDao fdao = new FilhoRevendedorDao();
                    for(FilhoRevendedor f : listaFilhos){
                        f.setRevendedor(retorno);
                        fdao.inserir(f);
                    }
                }

                //INSERE O ENDERECO DO REVENDEDOR
                this.enderecoRev.setRevendedor(retorno);
                new EnderecoRevendedorDao().inserir(enderecoRev);

            }

        }catch(DaoException e){
            e.printStackTrace();
        }

        return "novoPedido";

    }

Página de cadastro

<div class="box-footer">
     <h:commandButton value="Salvar" action="#{revendedorBean.salvar}" type="submit" styleClass="btn btn-block btn-success" style="width: 100px; float: left; margin-right: 10px;">
          <f:setPropertyActionListener target="#{vendaBean.revendedor}" value="#{revendedorBean.revendedor}" />
     </h:commandButton>
</div>
  • Estou na dúvida, mas seu retorno não teria que ser return "pages/comercial/venda/novoPedido";? O escopo do ManagedBean não deveria ser outro ao invés de @ViewScoped?

    rogerio_gentil   17 de set de 2015
  • Já tentou não usar a navegação do faces-config.xml e retornar a view que vc deseja ir no retorno do método? Outra coisa vc pode adicionar o valor '?faces-redirect=true' ao nome da view, ficando '/pages/comercial/venda/novoPedido.xhtml?faces-redirect=true' para fazer com que o sistema navegue para essa página, não apenas mudando internamente a viewid.

    lsjunior   17 de set de 2015
  • Não consegui entender muito bem a ideia de vocês, no caso do escopo do meu MB eu deveria conseguir redirecionar independente disso e o return eu configurei o outcome do faces-config, para quando for "novoPedido" ele ja retorna para a página definida no to-view-id!

    Giovani Figueiredo   17 de set de 2015
  • Se não me engano, um managed bean com escopo ViewScoped só permanece "vivo" enquanto você estiver na mesma página. Pelo que eu entendi também, você está tentando utilizar o retorno do método salvar() como o valor do atributo action (um outcome). É isso?

    rogerio_gentil   17 de set de 2015
  • Sim, essa parte do escopo está tranquilo, pois quando o sistema redirecionar para outra página, não vou precisar mais dos dados que contem neste! Sobre ou outcome, é isso mesmo, quando retorna a String "novoPedido" ele deve obedecer oque foi definido no faces-config, oque não está acontecendo! Não sei se o MB está travando o redirecionamento em algum ponto, fiz o debug e realmente ele salva e retorna a String, porém a página não reage!

    Giovani Figueiredo   17 de set de 2015
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags jsf java ou faça a sua própria pergunta.