Iniciando JSF

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:
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(); }