JSF+RichFaces - Erro no ComandLink quando é usado dentro do DataTable, ele nao direciona para a pagi

ola pessoal
eu estou tendo o seguinte problema,
tenho um datatable

					<rich:dataTable value="#{pessoaFisicaMB.pessoaFisicaLista}" rendered="#{pessoaFisicaMB.pessoaFisicaListaQtd>0}"  id="tabela" var="pessoa" border="0"  rowClasses="TbltrTrue,TbltrFalse" width="750">
					
						<rich:column>
							<f:facet name="header">
								<h:outputText value="Código" /> 
							</f:facet>
							<h:outputText value="#{pessoa.id}"/>
						</rich:column>
						<rich:column>
							<f:facet name="header">
								<h:outputText value="Nome" /> 
							</f:facet>
							<h:outputText value="#{pessoa.nome}"/>
						</rich:column>
						<rich:column>
							<f:facet name="header">
								<h:outputText value="CPF/CNPJ" /> 
							</f:facet>
							<h:outputText value="#{pessoa.documento}"/>
						</rich:column>	
						<rich:column>
							<f:facet name="header">
								<h:outputText value="Status" /> 
							</f:facet>
							<h:outputText value="#{pessoa.status.descr}"/>
						</rich:column>
						<rich:column>
							<f:facet name="header">
								<h:outputText value="Editar" /> 
							</f:facet>
							<h:commandLink value="Editar" action="#{pessoaFisicaMB.acaoEditar}">
								<f:param name="id" value="#{pessoa.id}" />
							</h:commandLink>
						</rich:column>
					</rich:dataTable>

que ao clicar no linkcomand, ele manda para a pagina de alteracao.
isso funcionava perfeitamente, ate que eu mudei o seguinte no meu ManagedBean.
adicionei a seguinte propriedade.

...
	private List<PessoaFisica> pessoaFisicaLista = new ArrayList<PessoaFisica>();

	public List<PessoaFisica> getPessoaFisicaLista() {
		return pessoaFisicaLista;
	}

	public void setPessoaFisicaLista(List<PessoaFisica> pessoaFisicaLista) {
		this.pessoaFisicaLista = pessoaFisicaLista;
	}
...

que a preencho atraves deste metodo

[code] public String busca() throws Exception{
if (getPessoaStatusId()!=“0”){
this.pessoaFisica.setStatus(Status.getStatusPorId(getPessoaStatusId()));
}
this.setPessoaFisicaLista(this.pessoaFisicaDB.getListaPorParametro(this.pessoaFisica));

	if(this.getPessoaFisicaLista().size()==0){
		FacesUtils.addErrorMessage("A Busca não obteve resultados");
	}

	return "lista";
}

[/code]

o meu acaoEditar deixei assim, apenas para testar o direcionamento

public String acaoEditar(){
	return "form";
}

e desde entao, so dor de cabeca
ele nao funciona se eu acessar direto a propriedade do managedbean(PessoaFisicaLista), porem, se eu acessar a do PessoaFisicaDB, ele funciona sem problemas.

eu adicionei no final da pagina o seguinte treixo de codigo

<h:commandLink value="Editar" action="#{pessoaFisicaMB.acaoEditar}"> <f:param name="id" value="128" /> </h:commandLink>
atraves dessa parte funciona perfeitamente, JUNTO com o datatable que nao funciona.

agora, o por que que isso ocorre?
o que estou fazendo de errado?

vou deixa o meu ManageBeam completo, nao reparem muito na bagunca, pois estava fazendo os teste pra ver se descobria os erros

package br.com.krusst.precadastro.managedbean;
import java.util.ArrayList;
import java.util.List;

import javax.faces.context.FacesContext;

import br.com.krusst.precadastro.bean.Email;
import br.com.krusst.precadastro.bean.Status;
import br.com.krusst.precadastro.bean.PessoaFisica;
import br.com.krusst.precadastro.bean.Telefone;
import br.com.krusst.precadastro.dao.EmailDB;
import br.com.krusst.precadastro.dao.LogradouroDB;
import br.com.krusst.precadastro.dao.PessoaFisicaDB;
import br.com.krusst.precadastro.dao.TelefoneDB;
import br.com.krusst.precadastro.util.FacesUtils;
import br.com.krusst.precadastro.util.KrusstException;
import br.com.krusst.precadastro.dao.PessoaFisicaDB;

public class PessoaFisicaMB {
	
	private final String ESTADO_DE_PESQUISA 	= "Pesquisar";
	private final String ESTADO_DE_CADASTRO 	= "Cadastrar";
	private final String ESTADO_DE_EDICAO 		= "Editar";
	private final String ESTADO_DE_REVISAO 		= "Revisar";	
	private final String ESTADO_DE_RECADASTRO 	= "Recadastrar";
	
	private String estadoAtual = ESTADO_DE_CADASTRO;
	String pessoaId;
	String pessoaNome;
	String pessoaDocumento;
	String pessoaStatusId;
	PessoaFisicaDB pessoaFisicaDB = new PessoaFisicaDB();
	PessoaFisica pessoaFisica = new PessoaFisica();
	LogradouroDB logradouroDB = new LogradouroDB();
	TelefoneDB telefoneDB = new TelefoneDB();
	EmailDB emailDB = new EmailDB();
	private List<PessoaFisica> pessoaFisicaLista = new ArrayList<PessoaFisica>();
	
	public PessoaFisicaMB() {
		super();
	}

	public String getPessoaNome() {
		return pessoaNome;
	}

	public String getPessoaDocumento() {
		return pessoaDocumento;
	}

	public void setPessoaNome(String pessoaNome) {
		this.pessoaNome = pessoaNome;
	}

	public void setPessoaDocumento(String pessoaDocumento) {
		this.pessoaDocumento = pessoaDocumento;
	}

	public List<PessoaFisica> getPessoaFisicaLista() {
		return pessoaFisicaLista;
	}

	public void setPessoaFisicaLista(List<PessoaFisica> pessoaFisicaLista) {
		this.pessoaFisicaLista = pessoaFisicaLista;
	}

	public String getESTADO_DE_PESQUISA() {
		return ESTADO_DE_PESQUISA;
	}

	public String getESTADO_DE_CADASTRO() {
		return ESTADO_DE_CADASTRO;
	}


	public String getESTADO_DE_EDICAO() {
		return ESTADO_DE_EDICAO;
	}

	public String getESTADO_DE_REVISAO() {
		return ESTADO_DE_REVISAO;
	}

	public String getESTADO_DE_RECADASTRO() {
		return ESTADO_DE_RECADASTRO;
	}

	public String getEstadoAtual() {
		return estadoAtual;
	}

	public String getPessoaStatusId() {
		if (pessoaStatusId == null){
			pessoaStatusId = "0";
		}
		return pessoaStatusId;
	}

	public String getPessoaId() {
		return pessoaId;
	}

	public PessoaFisicaDB getPessoaFisicaDB() {
		return pessoaFisicaDB;
	}


	public PessoaFisica getPessoaFisica() {
		return pessoaFisica;
	}


	public LogradouroDB getLogradouroDB() {
		return logradouroDB;
	}

	public TelefoneDB getTelefoneDB() {
		return telefoneDB;
	}

	public EmailDB getEmailDB() {
		return emailDB;
	}

	public void setEstadoAtual(String estadoAtual) {
		this.estadoAtual = estadoAtual;
	}

	public void setPessoaStatusId(String pessoaStatusId) {
		this.pessoaStatusId = pessoaStatusId;
	}

	public void setPessoaId(String pessoaId) {
		this.pessoaId = pessoaId;
	}

	public void setPessoaFisicaDB(PessoaFisicaDB pessoaFisicaDB) {
		this.pessoaFisicaDB = pessoaFisicaDB;
	}

	public void setPessoaFisica(PessoaFisica pessoaFisica) {
		this.pessoaFisica = pessoaFisica;
	}

	public void setLogradouroDB(LogradouroDB logradouroDB) {
		this.logradouroDB = logradouroDB;
	}

	public void setTelefoneDB(TelefoneDB telefoneDB) {
		this.telefoneDB = telefoneDB;
	}

	public void setEmailDB(EmailDB emailDB) {
		this.emailDB = emailDB;
	}


	public int getPessoaFisicaListaQtd(){
		return this.getPessoaFisicaLista().size();
	}

	public String busca() throws Exception{
		/*
		PessoaFisica pessoaFisicaParametro = new PessoaFisica();
		pessoaFisicaParametro.setStatus(Status.getStatusPorId(this.getPessoaId()));
		pessoaFisicaParametro.setNome(this.pessoaFisica.getNome());
		pessoaFisicaParametro.setDocumento(this.pessoaFisica.getDocumento());

		//pessoaFisicaParametro
		 */
		if (getPessoaStatusId()!="0"){
			this.pessoaFisica.setStatus(Status.getStatusPorId(getPessoaStatusId()));
		}
			this.setPessoaFisicaLista(this.pessoaFisicaDB.getListaPorParametro(this.pessoaFisica));

		if(this.getPessoaFisicaLista().size()==0){
			FacesUtils.addErrorMessage("A Busca não obteve resultados");
		}

		return "lista";
	}

	public String acaoEditar(){
		
	    String value = "0";
	    value = (String) FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");
		List<Telefone> listaTelefone = new ArrayList<Telefone>();
		List<Email> listaEmail = new ArrayList<Email>();		

		try {
			this.setPessoaFisica(this.pessoaFisicaDB.getPorId(Integer.parseInt(value)));
			
			this.pessoaFisica.setLogradouro(this.logradouroDB.getLogradouroPorParametro(Integer.parseInt(value), 0));

			listaTelefone = this.telefoneDB.getTelefonePorParametro(Integer.parseInt(value), 0);
			
				
			if (listaTelefone.size()>=1){this.pessoaFisica.setTelefone1(listaTelefone.get(0));}				
			if (listaTelefone.size()==2){this.pessoaFisica.setTelefone2(listaTelefone.get(1));}
			
			listaEmail = this.emailDB.getEmailPorParametro(Integer.parseInt(value), 0);
			
			if (listaEmail.size()>=1){this.pessoaFisica.setEmail1(listaEmail.get(0));}			
			if (listaEmail.size()==2){this.pessoaFisica.setEmail2(listaEmail.get(1));}

		} catch (Exception e) {
			e.printStackTrace();
		}
		this.setEstadoAtual(this.ESTADO_DE_EDICAO);
		
		return "form";
	}
	
	public String acaoCadastrar(){
		try {
			this.pessoaFisicaDB.insert(this.pessoaFisica);
			this.logradouroDB.insert(pessoaFisica.getId(),this.pessoaFisica.getLogradouro());

			this.telefoneDB.insert(pessoaFisica.getId(),this.getPessoaFisica().getTelefone1());
			this.telefoneDB.insert(pessoaFisica.getId(),this.getPessoaFisica().getTelefone2());			

			this.emailDB.insert(pessoaFisica.getId(),this.getPessoaFisica().getEmail1());
			this.emailDB.insert(pessoaFisica.getId(),this.getPessoaFisica().getEmail2());			
	
		} catch (KrusstException e) {
			e.printStackTrace();
		}
		FacesUtils.addInfoMessage("Cadastro de Pessoa realizado com sucesso, código do cadastro: " + this.pessoaFisica.getId());		
		this.pessoaFisicaDB.getPessoaFisica().setPessoaFisicaLimpa();
		return "cadastrar";
	}

}

abs
T+