Command Button - Redirecionar página

5,581 views
Skip to first unread message

Dionatan Hovoruski

unread,
Aug 20, 2011, 3:29:18 PM8/20/11
to javasf: JavaServer Faces Group
Como eu faço para ao clicar num commandbutton do primefaces
redirecionar para outra página?

Por exemplo.:

Eu tenho uma tela que lista várias turmas. Em cima desta lista eu
tenho o botão inserir(commandbutton), como faço para que quando eu
clicar neste botão a página ser redirecionada para a página de
inserção que eu tenho?

Lucas

unread,
Aug 20, 2011, 8:41:36 PM8/20/11
to javasf: JavaServer Faces Group
bom, vc tem que configurar no faces-config o resultado que virá do
bean e a pagina pra onde ir, exemplo:
<navigation-rule>
<from-view-id>paginaInicial.xhtml</from-view-id>
<navigation-case>
<from-outcome>ok</from-outcome>
<to-view-id>/minhaPagina.xhtml</to-view-id>
</navigation-case>
</navigation-rule>


e no bean , tem q retornar uma string, neste exemplo, ok.

no primefaces, vc tem q adicionar na tag o atributo ajax=false para a
navegação funcionar

Arthur Franco Ferreira

unread,
Aug 20, 2011, 9:57:18 PM8/20/11
to jav...@googlegroups.com
O que o Lucas disse funciona tanto para JSF 1 quanto para JSF 2. Porém, em JSF2, você não precisa configurar o faces-config para isso. Basta você colocar o acesso direto para a página de inserção. Exemplo:

<p:commandButton id="btnInserir" value="#{labels.editar}" action="/pages/inserirUsuario.xhtml" ajax="false" />

Abraços,

Arthur Franco Ferreira
Analista Desenvolvedor Web Java Pleno
Licenciado em Computação
UNILASALLE-RJ




2011/8/20 Lucas <lucasp...@gmail.com>
--
Você recebeu esta mensagem por que é membro do  Javasf
http://groups.google.com/group/javasf

Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil

Dionatan Hovoruski

unread,
Aug 20, 2011, 10:39:14 PM8/20/11
to javasf: JavaServer Faces Group
Eu fiz o que você falou e deu certo. Só que aconteceu o seguinte:

Na página que eu listo as turmas (turma/index.xhtml) eu tenho um botão
INSERIR que chama a action action="/turma/inserir.xhtml" ajax="false".
Até aí tudo bem, quando eu clico
a página é redirecionada corretamente. Entretanto, a url do navegador
continua como se eu estivesse na tela de listagem: turma/index.xhtml.

Na tela de inserção eu criei um botão cancelar, que cancela a inserção
e retorna para a tela de listagem. Porém, quando eu clico acontece o
efeito contrário. A página de listagem fica com a url /turma/
inserir.xhtml

Alguem sabe o motivo?

On Aug 20, 10:57 pm, Arthur Franco Ferreira <arcanjo...@gmail.com>
wrote:
> O que o Lucas disse funciona tanto para JSF 1 quanto para JSF 2. Porém, em
> JSF2, você não precisa configurar o faces-config para isso. Basta você
> colocar o acesso direto para a página de inserção. Exemplo:
>
> <p:commandButton id="btnInserir" value="#{labels.editar}"
> action="/pages/inserirUsuario.xhtml" ajax="false" />
>
> Abraços,
>
>    *Arthur Franco Ferreira*
> *Analista Desenvolvedor Web Java Pleno*
> Licenciado em Computação
> UNILASALLE-RJ
>
> 2011/8/20 Lucas <lucaspmor...@gmail.com>

Dionatan Hovoruski

unread,
Aug 20, 2011, 9:39:55 PM8/20/11
to javasf: JavaServer Faces Group
mesmo não tendo nenhuma ação preciso criar um bean?

Estou usando annotations, sabe como fazer em annotations?

Renieri

unread,
Aug 21, 2011, 1:30:08 PM8/21/11
to jav...@googlegroups.com
nao lembro de cabeca o nome correto, mas eh so vc colocar no action do
botao depois do nome da pagina o parametro ?faces-redirect=true

Em sábado, 20 de agosto de 2011, Dionatan
Hovoruski<dionat...@gmail.com> escreveu:

Arthur Franco Ferreira

unread,
Aug 22, 2011, 9:39:31 AM8/22/11
to jav...@googlegroups.com
Você não precisa criar um bean para navegação. Você só acessa o bean se quiser. Dessa forma que você fez você não está acessando bean nenhum.

Quanto a URL não mudar, isso é o conceito de Forward e Redirect. O Foward trabalha dessa forma que você utilizou e garante que os dados de uma página sejam passados para a outra automaticamente (se a chamada for um bean, ele chama os getters e setters dos campos correspondentes preenchendo-os e chamando os métodos necessários). Dessa forma, a URL não é atualizada. Ele sempre exibirá o local onde você estava antes, nunca o atual. Esse é o comportamento normal (e recomendado) do JSF.

Já com Redirect ele só chama a página e exibe ela. É como se você tivesse entrado com a URL direto no navegador e, portanto, ele exibe a página corrente. Porém, dessa forma não há passagem de parâmetros e dados entre páginas. Para isso, utilize a tag da seguinte forma:

<p:commandButton id="btnInserir" value="#{labels.editar}" action="/pages/inserirUsuario.xhtml?faces-redirect=true" ajax="false" />

Acredito que nesse caso de exibir a tela de inscrição, não haverá problema em usar Redirect. Porém, numa tela de edição, por exemplo, que você precisará preencher os campos, não poderá utilizar o Redirect.


Abraços,

Arthur Franco Ferreira
Analista Desenvolvedor Web Java Pleno
Licenciado em Computação
UNILASALLE-RJ




2011/8/21 Renieri <rayron....@gmail.com>

Dionatan Hovoruski

unread,
Aug 22, 2011, 12:28:36 PM8/22/11
to javasf: JavaServer Faces Group
Funcionou aqui Arthur.

Só que ao clicar em cancelar na tela de inserção que redireciona para
o index, acontece um erro por causa dos campos required e a página não
redireciona.

Sabe como contornar isto?

On Aug 22, 10:39 am, Arthur Franco Ferreira <arcanjo...@gmail.com>
wrote:
> Você não precisa criar um bean para navegação. Você só acessa o bean se
> quiser. Dessa forma que você fez você não está acessando bean nenhum.
>
> Quanto a URL não mudar, isso é o conceito de *Forward* e *Redirect*. O *
> Foward* trabalha dessa forma que você utilizou e garante que os dados de uma
> página sejam passados para a outra automaticamente (se a chamada for um
> bean, ele chama os getters e setters dos campos correspondentes
> preenchendo-os e chamando os métodos necessários). Dessa forma, a URL não é
> atualizada. Ele sempre exibirá o local onde você estava antes, nunca o
> atual. Esse é o comportamento normal (e recomendado) do JSF.
>
> Já com *Redirect* ele só chama a página e exibe ela. É como se você tivesse
> entrado com a URL direto no navegador e, portanto, ele exibe a página
> corrente. Porém, dessa forma não há passagem de parâmetros e dados entre
> páginas. Para isso, utilize a tag da seguinte forma:
>
> <p:commandButton id="btnInserir" value="#{labels.editar}"
> action="/pages/inserirUsuario.xhtml?faces-redirect=true" ajax="false" />
>
> Acredito que nesse caso de exibir a tela de inscrição, não haverá problema
> em usar Redirect. Porém, numa tela de edição, por exemplo, que você
> precisará preencher os campos, não poderá utilizar o Redirect.
>
> Abraços,
>
>    *Arthur Franco Ferreira*
> *Analista Desenvolvedor Web Java Pleno*
> Licenciado em Computação
> UNILASALLE-RJ
>
> 2011/8/21 Renieri <rayron.corr...@gmail.com>
>
>
>
>
>
>
>
> > nao lembro de cabeca o nome correto, mas eh so vc colocar no action do
> > botao depois do nome da pagina  o parametro ?faces-redirect=true
>
> > Em sábado, 20 de agosto de 2011, Dionatan
> > Hovoruski<dionatan1...@gmail.com> escreveu:

Arthur Franco Ferreira

unread,
Aug 22, 2011, 12:48:25 PM8/22/11
to jav...@googlegroups.com
Como que está o código do seu botão Cancelar?


Arthur Franco Ferreira
Analista Desenvolvedor Web Java Pleno
Licenciado em Computação
UNILASALLE-RJ




2011/8/22 Dionatan Hovoruski <dionat...@gmail.com>

Dionatan Hovoruski

unread,
Aug 22, 2011, 3:50:59 PM8/22/11
to javasf: JavaServer Faces Group
Assim:

<p:commandButton id="cancelar" action="/index.xhtml?faces-
redirect=true" ajax="false" />

On Aug 22, 1:48 pm, Arthur Franco Ferreira <arcanjo...@gmail.com>
wrote:
> Como que está o código do seu botão Cancelar?
>
>    *Arthur Franco Ferreira*
> *Analista Desenvolvedor Web Java Pleno*
> Licenciado em Computação
> UNILASALLE-RJ
>
> 2011/8/22 Dionatan Hovoruski <dionatan1...@gmail.com>

Arthur Franco Ferreira

unread,
Aug 22, 2011, 4:09:29 PM8/22/11
to jav...@googlegroups.com
Se ele dá o erro de validação, significa que ele está chamando a fase de validação. Para pular essa fase e ir direto para os métodos ou páginas que o seu botão chama, utilize o valor "immediate=true":

<p:commandButton id="cancelar" action="/index.xhtml?faces-redirect=true" ajax="false" immediate="true" />

Arthur Franco Ferreira
Analista Desenvolvedor Web Java Pleno
Licenciado em Computação
UNILASALLE-RJ




2011/8/22 Dionatan Hovoruski <dionat...@gmail.com>
Reply all
Reply to author
Forward
0 new messages