Boas,
estou iniciando a aprendizagem em JSF e fiz o seguinte tutorial:
http://netbeans.org/kb/docs/web/jsf20-crud.html
Ainda não consegui perceber como é feita a navegação entre páginas, pelo que como forma de aprendizagem estou tentando fazer o seguinte:
Na lista de clientes, tem uma coluna “Billing Address”.
Como posso para o endereço de cada um dos clientes, ter um link para a página dos detalhes daquele endereço??
Estava tentando alterar o controlador gerado para o cliente, mas sem sucesso… :S
Podem me dar uma ajuda?
A navegação no JSF 2 é feita de uma maneira muito simples.
Simplesmente invoque um método no seu managed bean que retorne uma String com o nome da página que você quer
exemplo:
public String navegaHome(){
return "home.xhtml";
}
Tem um tutorial muito bom aqui se quiser dar uma olhada.
Se quiser que eu explique com mais detalhes é só falar.
digaoneves, obrigado pela resposta, vou dar uma olhada nesse link.
Entretanto atente no seguinte:
eu esse tipo de navegação já entendi. Mas eu estou falando em links para uma página que muda consoante o “id” da entidade.
Veja o exemplo, desta listagem:
ID | Nome | Telefone | Grupo
1 | AAAA | 1111111 | 1
2 | BBBB | 2222222 | 2
3 | CCC | 3333333 | 5
4 | DDD | 4444444 | 1
… | …
O grupo terá uma página onde se podem ver os seus detalhes.
Normalmente seria criado um link como esse:
“detalhesGrupo.xhtml?id=5”
Sei que normalmente o jsf trabalha com POST e não com GET, mas mesmo assim não estou a perceber como se faz…
Como faço o link para o grupo de cada um dos registos?
Obrigado
você pode fazer algo assim no seu método:
public String submit() {
return "detalhesGrupo?faces-redirect=true&id="+getId();
}
e na sua página de destino você precisa ter essa tag:
<f:metadata>
<f:viewParam name="id" value="#{myBean.id}" />
</f:metadata>
uns links que te darão melhores explicações:
How do you pass view parameters when navigating from an action in JSF2?
JSF 2.0: View parameters
Fluent Navigation in JSF 2
Ok, consegui navegar até a uma página de detalhes como pretendia. ![:slight_smile: :slight_smile:](//www.guj.com.br/images/emoji/twitter/slight_smile.png?v=6)
No entanto . . . a página não contém os detalhes :lol:
Como disse no inicio, estou seguindo as classes geradas pelo netbeans seguindo aquele tutorial.
Ele cria um ManagedBean para cada entidade (AddressController, ClientController, ProjectController…)
Eu criei o método (que você chamou de submit) no ClientController. Mas a página de detalhes que pretendo exibir, é “controlada” por outro controller (nesse caso AddressController, mas seguindo o exemplo anterior seria um GrupoController).
Estou criando o método na classe certa (ClientController) ?
Se sim, como pode o controlador da página que pretendo mostrar, saber qual é o objecto a mostrar??
Peço desculpa pelas minhas dúvidas… Mas já vi muitos tutoriais, e parece que cada um tem uma forma diferente de fazer as coisas. Acabo ficando confuso.
você tem que criar o método no managedbean da tela que enviará os dados (ClientController no seu exemplo)…
e a tag metadata na tela que recebe… o seu managedbean (AdressController no caso), tem que ter um valor id
#{adressController.id}
que será preenchido com o valor da request pela tag metadata
<f:metadata>
<f:viewParam name="id" value="#{adressController.id}" />
</f:metadata>
Mande o cliente inteiro do controle e dai vc consegui o id e o resto dos atributos dele:
<f:metadata>
<f:viewParam name="cliente" value="#{adressController.cliente}" />
</f:metadata>
public String submit() {
return "detalhesGrupo?faces-redirect=true&id="+this.cliente.getId();
}