montei a sequinte tabela:
<h:dataTable styleClass=“label_Dados” width=“100%” var=“clientes” value="#{alterarCliente.lista}">
<h:column>
<h:commandLink action="#{clientes.atualizar}"><h:outputText value="#{clientes.nome}" /></h:commandLink>
</h:column>
</h:dataTable>
como faco para no meu bean pegar qual foi o cliente selecionado ?
Estou usando JSF pela primeira vez, mas acredito que para fazer isso voce precisa ter essa lista na sessao, pois ao clicar no link o componente procura o objeto Cliente nessa lista, ele da um getLista().
nao entendi sua resposta …
vc quer fazer o que? vc nao quer clicar no link do cliente que deseja alterar e em outra tela exibir os dados do cliente clicado? Pelo menos foi isso que entendi. Eu to falando que o componente já faz esse trabalho pra vc, de saber qual foi clicado e inclusive ja tem o objeto em maos, mas ele precisa pesquisar na lista que vc montou, e para isso essa lista precisa estar em sessao, pois ela é perdida no request. Entendeu?
agora entendi e como eu faco para pegar este objeto vc tem algum exemplo ?
Olha só:
eu tenho uma classe com os campos:
…
private List projetos;
private ProjetoVO projeto;
…
Certo? Na hora de montar minha lista eu usei o classe.projetos
Nessa mesma classe, tem o metodo:
public String consultarProjetos(){
this.projetos = projetoServico.consultarProjetos(filtro);
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(“projetos”, projetos);
Ou seja, ao montar a lista eu nao so atribui o valor a variavel, eu tambem coloquei na sessao. Pois quando vc clica no commandLink ele faz o seguinte: dá um get no campo da lista, no meu caso getProjetos();
e getProjetos ta assim:
public List getProjetos() {
if (projetos == null){
projetos = (List) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(“projetos”);
}
O meu commandLink chama o metodo detalharProjeto();
que está assim:
public String detalharProjeto(){
projeto = (ProjetoVO) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get(“projeto”);
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(“projeto”, projeto);
E pronto, ele está na propriedade projeto da minha classe.
na proxima tela eu simplesmente exibo todos os campos do objeto.
Ajudou?
Olha só:
eu tenho uma classe com os campos:
…
private List projetos;
private ProjetoVO projeto;
…
Certo? Na hora de montar minha lista eu usei o classe.projetos
Nessa mesma classe, tem o metodo:
public String consultarProjetos(){
this.projetos = projetoServico.consultarProjetos(filtro);
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(“projetos”, projetos);
Ou seja, ao montar a lista eu nao so atribui o valor a variavel, eu tambem coloquei na sessao. Pois quando vc clica no commandLink ele faz o seguinte: dá um get no campo da lista, no meu caso getProjetos();
e getProjetos ta assim:
public List getProjetos() {
if (projetos == null){
projetos = (List) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(“projetos”);
}
O meu commandLink chama o metodo detalharProjeto();
que está assim:
public String detalharProjeto(){
projeto = (ProjetoVO) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get(“projeto”);
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(“projeto”, projeto);
E pronto, ele está na propriedade projeto da minha classe.
na proxima tela eu simplesmente exibo todos os campos do objeto.
Ajudou?
Olha só:
eu tenho uma classe com os campos:
…
private List projetos;
private ProjetoVO projeto;
…
Certo? Na hora de montar minha lista eu usei o classe.projetos
Nessa mesma classe, tem o metodo:
public String consultarProjetos(){
this.projetos = projetoServico.consultarProjetos(filtro);
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(“projetos”, projetos);
Ou seja, ao montar a lista eu nao so atribui o valor a variavel, eu tambem coloquei na sessao. Pois quando vc clica no commandLink ele faz o seguinte: dá um get no campo da lista, no meu caso getProjetos();
e getProjetos ta assim:
public List getProjetos() {
if (projetos == null){
projetos = (List) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(“projetos”);
}
O meu commandLink chama o metodo detalharProjeto();
que está assim:
public String detalharProjeto(){
projeto = (ProjetoVO) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get(“projeto”);
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(“projeto”, projeto);
E pronto, ele está na propriedade projeto da minha classe.
na proxima tela eu simplesmente exibo todos os campos do objeto.
Ajudou?
[quote=DanielPaiva]montei a sequinte tabela:
<h:dataTable styleClass=“label_Dados” width=“100%” var=“clientes” value="#{alterarCliente.lista}">
<h:column>
<h:commandLink action="#{clientes.atualizar}"><h:outputText value="#{clientes.nome}" /></h:commandLink>
</h:column>
</h:dataTable>
como faco para no meu bean pegar qual foi o cliente selecionado ?[/quote]
Amigo…
tem uma solução mais atraente, se o que vc deseja é apenas o ID do cliente selecionado.
Gere um parametro (POST) para o link, como no velho jsp, asp, php, etc, assim:
Obs.: Meu Bean é um Book, com id, title, author e um metodo selectBook()
<h:column>
<f:facet name=“header”>
<h:outputText value=“Edit”/>
</f:facet>
<h:commandLink id=“Edit”
action=“editBook”
actionListener="#{bookBean.selectBook}">
<h:outputText value="Edit" />
<f:param id="editId"
name="id"
value="#{book.id}" />
</h:commandLink>
– > No método de selectBook, faça o seguinte:
UIParameter component = (UIParameter) event.getComponent().findComponent("editId"); //id do parametro
int id = Integer.parseInt(component.getValue().toString());
Onde editId é o id do book selecionado, criado no parametro <f:param> acima.
Pronto, ID recuperado.
Abraços