Primefaces - datatable seguido por outro datatable

Explicando oque estou tentando fazer.

Gero uma lista de empresas com um datatable, ao selecionar uma empresa, ele abre um novo datatable com os funcionários vinculados a empresa selecionada. Até ai está tudo certo, porem estou querendo é que no datatable dos funcionários, seja possível abrir um dialog com os detalhes do funcionário.

Porem não está está funcionando esse novo selection, ele mantem o selection da primeira datatable e não salva o selection para a segunda datatable. Creio que seja possivel resolver com um update, mas estou perdido nessa parte.

segue os codigos

primeiro datatable

				
					<p:dataTable id="EmpresaTable" var="result"
						value="#{empresaController.empresaLista}" rowKey="#{result.idEmpresa}" selection="#{administradorController.selectedEmpresa}"
						 selectionMode="single" paginator="true" rows="6" >
						  
	        					
							 <f:facet name="header">  
			           			 Clique sobre a promoção que deseja ativar
			        		</f:facet>  
			        		
						<p:column exportable="false">
							<p:rowToggler/>
						</p:column>
						
							<p:column sortBy="#{result.idEmpresa}">
			
							<f:facet name="header">
								<h:outputText value="id" />
							</f:facet>
							<h:outputText value="#{result.idEmpresa}" />
						</p:column>
						
						<p:column sortBy="#{result.nome}" exportable="false">
			
							<f:facet name="header">
								<h:outputText value="nome" />
							</f:facet>
							<h:outputText value="#{result.nome}" />
						</p:column>
						
						<p:column sortBy="#{result.cnpj}">
			
							<f:facet name="header">
								<h:outputText value="pontos" />
							</f:facet>
							<h:outputText value="#{result.cnpj}" />
						</p:column>
						
								
						<f:facet name="footer">
							<p:commandButton action="#{administradorController.detalhaEmpresa}" value="confirmar"  />
						</f:facet>
				
					</p:dataTable> 
				</h:form>

segundo datatable

<h:form id="formFunc">
					<p:dataTable id="dataFunc" var="func" value="#{administradorController.listaFuncionarioEmpresa}" rowKey="#{func.idFuncionario}" selection="#{administradorController.selectedFuncionario}"
						selectionMode="single" paginator="true"  >
						
						<p:column sortBy="#{func.email}">
						<f:facet name="header">
							<h:outputText value="email" />
						</f:facet>
							<h:outputText value="#{func.email}" />
						</p:column>
						<p:column sortBy="#{func.idFuncionario}">
						<f:facet name="header">
							<h:outputText value="id" />
						</f:facet>
							<h:outputText value="#{func.idFuncionario}" />
						</p:column>
						
						<f:facet name="footer">
							<p:commandButton  value="visualizar" onclick="funcionario.show();" type="button"  />
						</f:facet>
						
					</p:dataTable>
					
					<p:dialog id="dialog" widgetVar="funcionario" >
						<h:panelGrid id="display" columns="2">
							<h:outputText value="email:"/>
							<h:outputText value="#{administradorController.selectedFuncionario.email}"/>	
						</h:panelGrid>
					</p:dialog>		
				</h:form>

Bean

package br.com.fideliza.controller;

import java.util.List;

import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import org.primefaces.component.tabview.Tab;
import org.primefaces.event.TabChangeEvent;

import br.com.fideliza.DAO.AdministradorDAO;
import br.com.fideliza.DAO.EmpresaDAO;
import br.com.fideliza.DAO.FuncionarioDAO;
import br.com.fideliza.DAO.PromocaoDAO;
import br.com.fideliza.model.Administrador;
import br.com.fideliza.model.Empresa;
import br.com.fideliza.model.Funcionario;
import br.com.fideliza.model.Promocao;

public class AdministradorController {
	
	private Administrador admin;
	private AdministradorDAO adminDAO;
	private Empresa empresa;
	private EmpresaDAO empresaDAO;
	private Empresa selectedEmpresa;
	private FuncionarioDAO funcionarioDAO;
	private Funcionario funcionario;
	private Funcionario selectedFuncionario;
	private Promocao promocao;
	private Promocao selectedPromocao;
	private PromocaoDAO promocaoDAO;
	private DataModel<Funcionario> listaFuncionarioEmpresa;
	private DataModel<Promocao> listaPromocaoEmpresa;

	
	public AdministradorController(){
		this.admin = new Administrador();
		this.adminDAO = new AdministradorDAO();
		this.empresa = new Empresa();
		this.empresaDAO = new EmpresaDAO();
		this.funcionarioDAO = new FuncionarioDAO();
		this.promocaoDAO = new PromocaoDAO();
	}
	
	public String ativarEmpresa (){
		
		empresa = selectedEmpresa;
		empresa.setStatus(true);
		empresa.setNovaEmpresa(false);
		
		empresaDAO.ativaEmpresa(empresa);
		
		return "ativarEmpresa";
	}
	
	public String detalhaEmpresa(){
			
		empresa = empresaDAO.BuscaPorId(selectedEmpresa.getIdEmpresa());
		
		
		return "detalhaEmpresa";
		
	}
	public String detalhaFuncionario(){
		
		funcionario = funcionarioDAO.buscaPorId(selectedFuncionario.getIdFuncionario());
		
		return "detalhaFuncionario";
		
	}
	
	public void detalhaPromocao(){
		
		promocao = promocaoDAO.buscaPorId(selectedPromocao.getIdPromocao());
		
	}
	
	public void editaEmpresa() {
		
		empresaDAO.editaEmpresa(empresa);

	}
	
	public void onTabChange(TabChangeEvent event){
		event.getTab();
	}

	//get e set
	
	public Empresa getSelectedEmpresa() {
		return selectedEmpresa;
	}

	public Funcionario getFuncionario() {
		return funcionario;
	}

	public void setFuncionario(Funcionario funcionario) {
		this.funcionario = funcionario;
	}

	public Promocao getPromocao() {
		return promocao;
	}

	public void setPromocao(Promocao promocao) {
		this.promocao = promocao;
	}

	public Promocao getSelectedPromocao() {
		return selectedPromocao;
	}

	public void setSelectedPromocao(Promocao selectedPromocao) {
		this.selectedPromocao = selectedPromocao;
	}

	public Funcionario getSelectedFuncionario() {
		return selectedFuncionario;
	}

	public void setSelectedFuncionario(Funcionario selectedFuncionario) {
		this.selectedFuncionario = selectedFuncionario;
	}

	public DataModel<Promocao> getListaPromocaoEmpresa() { // lista promoções de uma empresa
		if(listaPromocaoEmpresa == null){
			List<Promocao> promocao = new PromocaoDAO().listaPorEmpresa(selectedEmpresa);
			listaPromocaoEmpresa = new ListDataModel<Promocao>(promocao);
		}
		return listaPromocaoEmpresa;
	}

	public void setListaPromocaoEmpresa(DataModel<Promocao> listaPromocaoEmpresa) {
		this.listaPromocaoEmpresa = listaPromocaoEmpresa;
	}

	public DataModel<Funcionario> getListaFuncionarioEmpresa() { //lista funcionarios de uma empresa
		
		if(listaFuncionarioEmpresa == null){
			
			List<Funcionario> funcionario = new FuncionarioDAO().BuscaPorEmpresa(selectedEmpresa.getIdEmpresa());
			listaFuncionarioEmpresa = new ListDataModel<Funcionario>(funcionario);
		}
		return listaFuncionarioEmpresa;
	}

	public void setListaFuncionarioEmpresa(
			DataModel<Funcionario> listaFuncionarioEmpresa) {
		this.listaFuncionarioEmpresa = listaFuncionarioEmpresa;
	}

	public void setSelectedEmpresa(Empresa selectedEmpresa) {
		this.selectedEmpresa = selectedEmpresa;
	}

	public Empresa getEmpresa() {
		return empresa;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}
	

}