Editar e Inserir novo Objeto - JSF

Olá pessoal.

Estou com uma dificuldade aqui.

Criei uma tela com vários campos para cadastro de funcionários. Consiste em um dataTable com dois botões logo abaixo (novo e editar). O dataTable está com a opção Selection ativada, sendo assim, no momento que o usuário clicar em alguma linha ele setará aquele registro para o objeto do meu ManegedBean. No momento em que o usuário clicar em editar é aberto um dialog e eu consigo editar este objeto normalmente. O problema é que se eu tentar criar um novo objeto clicando em “novo” ele carrega os dados do objeto anterior. No momento em que ele clica em novo é chamada uma função que setá novos objetos além de um update no componente responsável por renderizar a tela, mesmo assim não tive sucesso. Se alguém puder me dar alguma dica, desde já agradeço.

Abaixo um treço do meu código:

Meu DataTable

					<p:dataTable value="#{funcionarioBean.funcionarios}" var="funcionario" 
						paginator="true" rows="50" selection="#{funcionarioBean.funcionario}" 
						selectionMode="single" rowKey="#{funcionario.id}" >
						<p:ajax event="rowSelect" update=":novo" />
					
						<p:column headerText="Código">
							#{funcionario.id}
						</p:column>
						
						<p:column headerText="Nome">
							#{funcionario.pessoa.nome}
						</p:column>
						
						<p:column headerText="Telefone">
							#{funcionario.pessoa.telefone}
						</p:column>						
						
						<p:column headerText="Celular">
							#{funcionario.pessoa.celular}
						</p:column>			
						
						<f:facet name="footer">
						
							<p:commandButton value="Novo Funcionário" id="newFuncionarioButton"
								action="#{funcionarioBean.novo}" onclick="nf.show()" type="button" >
								<f:ajax event="click" update=":novo" />
							</p:commandButton>	
							
							<p:commandButton value="Editar Funcionário" id="editFuncionarioButton"
								 type="button" onclick="nf.show()" />
						
						</f:facet>																																	
					
					</p:dataTable>

Meu CRUD com meu cadastro:

				<h:form id="novo">
				
					<p:dialog id="newFuncionario" header="Novo Funcionário" widgetVar="nf" modal="true" >
						<p:ajax event="close" update=":listagem" />
						
						<p:tabView id="tabView"> 
						
							<p:tab id="tab1" title="Dados Pessoais" >
							
								<fieldset>
																
									<legend>Dados Pessoais</legend>
									
										<h:panelGrid columns="2" >
												
											<h:outputText value="Nome: *" />
											<p:inputText id="nome" value="#{funcionarioBean.funcionario.pessoa.nome}" maxlength="150" size="150" />
											
											<h:outputText value="Telefone: " />																		
											
											<h:panelGrid columns="5" >
																				
												<p:inputMask id="telefone" value="#{funcionarioBean.funcionario.pessoa.telefone}" maxlength="10" mask="(99)9999-9999" />								
																					
												<h:outputText value="Celular: " />
												<p:inputMask id="celular" value="#{funcionarioBean.funcionario.pessoa.celular}" maxlength="10" mask="(99)9999-9999" />
												
												<h:outputText value="Fax: " />
												<p:inputMask id="fax" value="#{funcionarioBean.funcionario.pessoa.fax}" maxlength="10" mask="(99)9999-9999" />
												
											</h:panelGrid>
											
											<h:outputText value="Email: " />
											<p:inputText id="email" value="#{funcionarioBean.funcionario.pessoa.email}" maxlength="50" size="50" />
																																																																																																										
											<h:outputText value="Endereço:" />
											
											<h:panelGrid columns="4" >
																								
												<p:selectOneMenu value="#{funcionarioBean.idTipoLogradouro}" >
												
													<f:selectItem itemLabel="Selecione um Tipo de Logradouro..." itemValue="" />
													<f:selectItems value="#{funcionarioBean.tiposLogradouros}" var="tipoLogradouro" itemValue="#{tipoLogradouro.id}" itemLabel="#{tipoLogradouro.descricao}"  />
												
												</p:selectOneMenu>
													
												<p:inputText id="endereco" value="#{funcionarioBean.funcionario.pessoa.endereco.logradouro}" maxlength="50" size="80" />
																		
												<h:outputText value="Nº:" />
												<p:inputText id="numero" value="#{funcionarioBean.funcionario.pessoa.endereco.numero}" maxlength="20" size="20" />																
																		
											</h:panelGrid>
											
											<h:outputText value="Complemento:" />
											
											<h:panelGrid columns="4" >
												
												<p:inputText id="complemento" value="#{funcionarioBean.funcionario.pessoa.endereco.complemento}" maxlength="50" size="50" />
												
												<h:outputText value="CEP:" />	
												<p:inputMask id="cep" value="#{funcionarioBean.funcionario.pessoa.endereco.cep}" maxlength="7" size="10" mask="99999-999" />
																																																							
											</h:panelGrid>
											
											<h:outputText value="Estado:" />
											
											<h:panelGrid columns="4" >
											
												<p:selectOneMenu value="#{funcionarioBean.idEstado}" >
												
													<f:selectItem itemLabel="Selecione um Estado..." itemValue="" />
												</p:selectOneMenu>
												
												<h:outputText value="Municipio:" />
												<p:selectOneMenu value="#{funcionarioBean.idEstado}" >
												
													<f:selectItem itemLabel="Selecione um Municipio..." itemValue="" />
												</p:selectOneMenu>	
												
											</h:panelGrid>																
											
											<h:outputText value="Observação: " />
											<p:inputTextarea id="obs" value="#{funcionarioBean.funcionario.pessoa.observacao}" maxlength="255" size="255" />												
																																																																							
										</h:panelGrid>													
								
								</fieldset>
							
							</p:tab>
							
							<p:tab id="tab2" title="Dados Profissionais" >
							
								<fieldset>
								
									<legend>Dados Profissionais</legend>
									
									<h:panelGrid columns="2"  >
									
										<h:outputText value="Cargo: " />
										<p:selectOneMenu value="#{funcionarioBean.idCargo}" >
										
											<f:selectItem itemLabel="Selecione um cargo..." itemValue="" />
											<f:selectItems value="#{funcionarioBean.cargos}" var="cargo" itemValue="#{cargo.id}" itemLabel="#{cargo.nome}"  />
										
										</p:selectOneMenu>  			
		
										<h:outputText value="Salário R$:" />
										<p:inputText value="#{funcionarioBean.funcionario.salario}" size="10" required="true" />				
									
									</h:panelGrid>
								
								</fieldset>
							
							</p:tab>
																											
						</p:tabView>

Por fim, meu ManagedBean

package br.flexweb.beans;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.flexweb.dao.CargoDAO;
import br.flexweb.dao.EnderecoDAO;
import br.flexweb.dao.FuncionarioDAO;
import br.flexweb.dao.PessoaDAO;
import br.flexweb.dao.TipoLogradouroDAO;
import br.flexweb.models.Cargo;
import br.flexweb.models.Endereco;
import br.flexweb.models.Funcionario;
import br.flexweb.models.Pessoa;
import br.flexweb.models.TipoLogradouro;

@ViewScoped
@ManagedBean
public class FuncionarioBean {

	private Funcionario funcionario = new Funcionario();
	private Pessoa pessoa = new Pessoa();
	private Endereco endereco = new Endereco();
	private TipoLogradouro tipoLogradouro = new TipoLogradouro();

	private FuncionarioDAO daoFunc = new FuncionarioDAO();
	private TipoLogradouroDAO daoLog = new TipoLogradouroDAO();
	private CargoDAO daoCargo = new CargoDAO();
	private EnderecoDAO daoEnd = new EnderecoDAO();
	private PessoaDAO daoPessoa = new PessoaDAO();

	private List<Funcionario> funcionarios;
	private List<Cargo> cargos;
	private List<TipoLogradouro> tiposLogradouros;

	private Funcionario funcionarioSelecionado;

	private Integer idTipoLogradouro;
	private Integer idCargo;
	private Integer idEstado;
	private Integer idMunicipio;

	public FuncionarioBean() {
		pessoa.setEndereco(endereco);
		funcionario.setPessoa(pessoa);
	}

	public void novo(){
		this.pessoa = new Pessoa();
		this.funcionario = new Funcionario();
		
		this.pessoa.setEndereco(endereco);
		this.funcionario.setPessoa(pessoa);
	}
	
	public void cancelar() {
		limparFormulario();
	}

	public Funcionario getFuncionario() {
		return funcionario;
	}

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

	private void limparFormulario() {
		this.funcionario = new Funcionario();
		this.funcionarios = daoFunc.lista();
		idCargo = null;
		idTipoLogradouro = null;
	}

	public List<Funcionario> getFuncionarios() {
		if (funcionarios == null) {
			this.funcionarios = daoFunc.lista();
		}

		return funcionarios;
	}

	public void gravar() {
		System.out.println("VARIAVEL - " + idTipoLogradouro);
		if (funcionario.getId() == null) {
			funcionario.setCargo(daoCargo.busca(idCargo));
			endereco.setTipoLogradouro(new TipoLogradouroDAO()
					.busca(idTipoLogradouro));
			daoEnd.adicionar(endereco);
			daoPessoa.adicionar(pessoa);
			daoFunc.adicionar(funcionario);
		} else {		
			daoPessoa.atualizar(funcionario.getPessoa());
			daoEnd.atualizar(funcionario.getPessoa().getEndereco());
			daoFunc.atualizar(funcionario);
		}

		limparFormulario();
	}

	public void remover(Funcionario funcionario) {
		daoFunc.remover(funcionario);
		limparFormulario();
	}

	public Funcionario getFuncionarioSelecionado() {
		return funcionarioSelecionado;
	}

	public void setFuncionarioSelecionado(Funcionario funcionarioSelecionado) {
		this.funcionarioSelecionado = funcionarioSelecionado;
	}

	public Integer getIdTipoLogradouro() {
		return idTipoLogradouro;
	}

	public void setIdTipoLogradouro(Integer idTipoLogradouro) {
		this.idTipoLogradouro = idTipoLogradouro;
	}

	public Integer getIdCargo() {
		return idCargo;
	}

	public void setIdCargo(Integer idCargo) {
		this.idCargo = idCargo;
	}

	public List<Cargo> getCargos() {
		if (cargos == null)
			cargos = daoCargo.lista();

		return cargos;
	}

	public void setCargos(List<Cargo> cargos) {
		this.cargos = cargos;
	}

	public Pessoa getPessoa() {
		return pessoa;
	}

	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}

	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public TipoLogradouro getTipoLogradouro() {
		return tipoLogradouro;
	}

	public void setTipoLogradouro(TipoLogradouro tipoLogradouro) {
		this.tipoLogradouro = tipoLogradouro;
	}

	public List<TipoLogradouro> getTiposLogradouros() {
		if (tiposLogradouros == null)
			tiposLogradouros = daoLog.lista();

		return tiposLogradouros;
	}

	public void setTiposLogradouros(List<TipoLogradouro> tiposLogradouros) {
		this.tiposLogradouros = tiposLogradouros;
	}

	public Integer getIdEstado() {
		return idEstado;
	}

	public void setIdEstado(Integer idEstado) {
		this.idEstado = idEstado;
	}

	public Integer getIdMunicipio() {
		return idMunicipio;
	}

	public void setIdMunicipio(Integer idMunicipio) {
		this.idMunicipio = idMunicipio;
	}

}

Lembrando que não existem form aninhados na minha aplicação.

Obrigado

Ninguem tem alguma dica?