RichFaces - ScrollDataTable: Pegar a linha selecionada

6 respostas
R

Não estou conseguindo pegar a linha selecionada de um ScrollDataTable. Alguém saberia dizer o que estou deixando de fazer?

Segue abaixo o código da página:

<%–
Document : pessoa
Created on : 15/01/2009, 06:05:14
Author : SYSMAP
–%>

<%@page contentType=“text/html” pageEncoding=“UTF-8”%>

<%@taglib uri=“http://richfaces.org/a4j” prefix=“a4j”%>
<%@taglib uri=“http://richfaces.org/rich” prefix=“rich”%>
<%@taglib prefix=“f” uri=“http://java.sun.com/jsf/core”%>
<%@taglib prefix=“h” uri=“http://java.sun.com/jsf/html”%>
<%@taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”%>

JSP Page

Aqui é o bean manager:

/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package br.com.sisdoutor.pessoa;
import br.com.sisdoutor.exceptions.ParamNotFoundException;

import br.com.sisdoutor.AbstractBean;

import br.com.sisdoutor.dto.AbstractDto;

import br.com.sisdoutor.dto.pessoa.Pessoa;

import br.com.sisdoutor.session.DtoFacadeLocal;

import java.lang.reflect.InvocationTargetException;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import javax.ejb.EJB;

import org.richfaces.model.selection.Selection;

/**
*

  • @author SYSMAP
    */
    public final class PessoaBean extends AbstractBean {

    @EJB
    
    private DtoFacadeLocal dtoFacadeLocal;
    
    private static AbstractDto dto;
    
    private List pessoas = new ArrayList();
    
    private Selection selection;
    
    private Integer id;
    
    private String codPessoa;
    
    private String nomPessoa;
    
    public PessoaBean() {
    
    super();
    
    this.setAb(this);
    
    }
    
    public PessoaBean(Integer id) {
    
    this.id = id;
    
    }
    
    public Integer getId() {
    
    return id;
    
    }
    
    public void setId(Integer id) {
    
    this.id = id;
    
    }
    
    public String getCodPessoa() {
    
    return codPessoa;
    
    }
    
    public void setCodPessoa(String codPessoa) {
    
    this.codPessoa = codPessoa;
    
    }
    
    public String getNomPessoa() {
    
    return nomPessoa;
    
    }
    
    public void setNomPessoa(String nomPessoa) {
    
    this.nomPessoa = nomPessoa;
    
    }
    

    /**

    • @return the pessoas
      */
      public List getPessoas() {
      return pessoas;
      }

    /**

    • @param pessoas the pessoas to set
      */
      public void setPessoas(List pessoas) {
      this.pessoas = pessoas;
      }

    /**

    • @return the selection
      */
      public Selection getSelection() {
      return selection;
      }

    /**

    • @param selection the selection to set
      */
      public void setSelection(Selection selection) {
      this.selection = selection;
      }
    public void save() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, ParamNotFoundException {
    
    if (dto == null) {
    
    if (id != null) {
    
    dto = dtoFacadeLocal.getDto(Pessoa.class, id);
    
    } else {
    
    dto = new Pessoa();
    
    }
    
    }
    
    ((Pessoa) dto).setCodPessoa((String) this.getValueForName(codPessoa));
    
    ((Pessoa) dto).setNomPessoa((String) this.getValueForName(nomPessoa));
    
    dtoFacadeLocal.saveOrUpdate(dto);
    
    dto = null;
    
    }
    
    public void limpar() throws InvocationTargetException, IllegalAccessException, ParamNotFoundException {
    
    this.setValueForName(id, null);
    
    this.setValueForName(codPessoa, null);
    
    this.setValueForName(nomPessoa, null);
    
    dto = null;
    
    }
    
    public void pesquisar() {
    
    pessoas = dtoFacadeLocal.getDtos(Pessoa.class);
    
    }
    
    public void editSelected() {
    
    Iterator keys = selection.getKeys();
    
    int teste = selection.size();
    
    keys = null;
    
    }
    
    }
    

Se alguém puder ajudar eu agradeço.

Att.

Marco Antonio Rodrigues.

6 Respostas

G

Coloca os registros da sua lista em um DataModel no seu MB…

Assim você pode acessar o registro selecionado utilizando o método getRowData() do seu DataModel.

R

Gbzao!, obrigado pela dica. Vou tentar.

Att.

Marco Antonio Rodrigues.

R

Gbzao, estava assoberbado em outro projeto, por isso nao pude testar a sua sugestão a mais tempo.
Como sugeriu, substitui o List de value para um javax.faces.model.ListDataModel, porém, quando pego a linha pelo método .getRowData(), ele retorna sempre a última linha da lista.

Você poderia me dizer o que está faltando no meu código.

Já conferi tudo. Devo estar deixando passar algo.

Att.

Marco Antonio Rodrigues.

G

Poste seu novo código, desta vez entre as tags code, para formatação.

R

Abaixo está todo o código, tanto do bean quanto da página JSF:

Código JSF

<%-- 
		Document   : pessoa
		Created on : 15/01/2009, 06:05:14
		Author     : Marco Antonio Rodrigues
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<%@taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@taglib uri="http://richfaces.org/rich" prefix="rich"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>JSP Page</title>
	</head>
	<body>
		<f:view>
			<a4j:form id="pessoaForm">
				<rich:panel header="Pessoa Física" rendered="true" id="pessoaPanel">
					<center>
						<table>
							<tr>
								<td><h:outputText value="Identificador: "/></td>
								<td><h:inputText size="50" value="#{pessoaBean.id}"></h:inputText></td>
							</tr>
							<tr>
								<td><h:outputText value="CPF/CNPJ: "/></td>
								<td><h:inputText size="50" value="#{pessoaBean.codPessoa}" ></h:inputText></td>
							</tr>
							<tr>
								<td><h:outputText value="Nome: "/></td>
								<td><h:inputText size="50" value="#{pessoaBean.nomPessoa}" ></h:inputText></td>
							</tr>
							<tr>
								<td><a4j:commandButton reRender="pessoaForm" action="#{pessoaBean.save}" value="Salvar"/></td>
								<td><a4j:commandButton reRender="pessoaForm" action="#{pessoaBean.limpar}" value="Limpar"/></td>
								<td><a4j:commandButton reRender="pessoasTable" action="#{pessoaBean.pesquisar}" value="Pesquisar"/></td>
							</tr>
						</table>
					</center>
				</rich:panel>
			</a4j:form>
			<a4j:form id="pessoasForm">
				<a4j:keepAlive beanName="pessoaBean"/>
				<rich:panel header="Pesquisa" rendered="true" id="pessoasPanel">
					<center>
						<rich:scrollableDataTable value="#{pessoaBean.pessoas}" var="pfj"
																id = "pessoasTable" width="600px" height="300px"
																frozenColCount="1"
																first="0"
																rowKeyVar="rkv"
																sortMode="single"
																>
							<a4j:support  event="onRowClick" action="pessoaBean.editSelected"/>
							<rich:column id="id" width="100px">
								<f:facet name="header" >
									<h:outputText value="Identificador"/>
								</f:facet>
								<h:outputText value="#{pfj.id}"/>
								<f:facet name="footer">
									<h:outputText value="Identificador"/>
								</f:facet>
							</rich:column>
							<rich:column id="codPessoa" width="100px">
								<f:facet name="header" >
									<h:outputText value="CPF"/>
								</f:facet>
								<h:outputText value="#{pfj.codPessoa}"/>
								<f:facet name="footer">
									<h:outputText value="CPF"/>
								</f:facet>
							</rich:column>
							<rich:column id="nomPessoa" width="380px">
								<f:facet name="header" >
									<h:outputText value="Nome"/>
								</f:facet>
								<h:outputText  value="#{pfj.nomPessoa}"/>
								<f:facet name="footer">
									<h:outputText value="Nome"/>
								</f:facet>
							</rich:column>
						</rich:scrollableDataTable>
						<rich:spacer height="20px"/>
						<a4j:commandButton value="Editar seleção" reRender="pessoaForm"
												 action="#{pessoaBean.editSelected}"
												 immediate="true"/>
					</center>
				</rich:panel>
			</a4j:form>
			<center>
				<a4j:log popup="false" level="FATAL" style="width: 800px; height: 300px;"></a4j:log>
			</center>
		</f:view>
	</body>
</html>

Aqui está o Bean

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.sisdoutor.pessoa;

import br.com.sisdoutor.exceptions.ParamNotFoundException;
import br.com.sisdoutor.AbstractBean;
import br.com.sisdoutor.dto.AbstractDto;
import br.com.sisdoutor.dto.pessoa.Pessoa;
import br.com.sisdoutor.session.DtoFacadeLocal;
import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import javax.ejb.EJB;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

/**
 *
 * @author SYSMAP
 */
public final class PessoaBean extends AbstractBean implements Serializable {

	@EJB
	private DtoFacadeLocal dtoFacadeLocal;
	private AbstractDto dto;
	private DataModel pessoas;
	private Integer id;
	private String codPessoa;
	private String nomPessoa;

	public PessoaBean() {
		super();
		this.setAb(this);
	}

	public PessoaBean(Integer id) {
		this.id = id;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getCodPessoa() {
		return codPessoa;
	}

	public void setCodPessoa(String codPessoa) {
		this.codPessoa = codPessoa;
	}

	public String getNomPessoa() {
		return nomPessoa;
	}

	public void setNomPessoa(String nomPessoa) {
		this.nomPessoa = nomPessoa;
	}

	public void save() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, ParamNotFoundException {
		if (dto == null) {
			if (id != null) {
				dto = dtoFacadeLocal.getDto(Pessoa.class, id);
			} else {
				dto = new Pessoa();
			}
		}
		((Pessoa) dto).setCodPessoa((String) this.getValueForName("codPessoa"));
		((Pessoa) dto).setNomPessoa((String) this.getValueForName("nomPessoa"));
		dtoFacadeLocal.saveOrUpdate(dto);
		dto = null;
	}

	public void limpar() throws InvocationTargetException, IllegalAccessException, ParamNotFoundException {
		this.setValueForName("id", null);
		this.setValueForName("codPessoa", null);
		this.setValueForName("nomPessoa", null);
		dto = null;
	}

	public void pesquisar() {
		pessoas = new ListDataModel( dtoFacadeLocal.getDtos(Pessoa.class));
	}

	public String editSelected() throws IllegalArgumentException, InvocationTargetException, IllegalAccessException, ParamNotFoundException {
		Pessoa p =  (Pessoa) pessoas.getRowData();
		this.setId(p.getId());
		this.setCodPessoa(p.getCodPessoa());
		this.setNomPessoa(p.getNomPessoa());
		dto = p;
		return "editComplet";
	}

	/**
	 * @return the pessoas
	 */
	public DataModel getPessoas() {
		return pessoas;
	}

	/**
	 * @param pessoas the pessoas to set
	 */
	public void setPessoas(DataModel pessoas) {
		this.pessoas = pessoas;
	}

}

Att.

Marco Antonio

A

Bom dia, Estoum passando pelo mesmo probloema alguém tem alguma solução?

Criado 16 de janeiro de 2009
Ultima resposta 15 de dez. de 2009
Respostas 6
Participantes 3