Ajax do PrimeFaces não funciona após erro de tela

Olá pessoal, eu estou com um problema complicado de explicar e gostaria da ajuda de vocês.
Estou desenvolvendo um cadastro para profissionais possui a seguinte regra: “Um profissional deve possuir pelo menos 1 especialização”, ou seja,
eu tenho um relacionamento n:n entre profissional e especialização. Criei o cadastro de profissionais, nesse cadastro eu tenho uma parte para adicionar
as especializações e relacioná-las com o profissional que está sendo gravado.
Se nenhum erro acontecer, o cadastro funciona perfeitamente, mas se um erro acontecer, eu não consigo adicionar nenhuma especialização. O evendo associado ao
botão adicionar simplesmente não dispara.
Estou colocando a imagem do problema (em anexo) e o código…agradeço qualquer ajuda.

Formulário:

<ui:composition template="/template/admintemplate.xhtml">
	<ui:define name="conteudo">
			   		
		<p:panel header="Cadastro de Profissional de Saúde">
			
			<h:outputScript library="scripts" name="somentenumeros.js" />
			
			<h:form id="frmcadprofissional">
								
				<p:messages id="mensagens" showDetail="false" autoUpdate="true" closable="true"/>				
				
				<h:inputHidden id="profissionalid" value="#{profissionalBean.profissional.id}"/>
				<h:inputHidden id="pessoaid" value="#{profissionalBean.pessoa.id}"/>				
				
				<h:panelGrid columns="2">
					
					<h:outputLabel value="Documento *" for="documento"/>
					<p:inputText id="documento" value="#{profissionalBean.pessoa.documento}"
						size="14" maxlength="14" required="true" requiredMessage="Informe o número do documento"
						onkeypress="return somenteNumero(event);">
						<f:validator validatorId="documentoValidator"/>
						<p:ajax event="change" update="pessoaid, nome, logradouro, numero, complemento, bairro, pngestado, 
							pngcidade, cep, telefone1, telefone2, email"
							listener="#{profissionalBean.carregarDadosPessoa}"/>
					</p:inputText> 										

					<h:outputLabel value="Nome *" for="nome"/>
					<p:inputText id="nome" value="#{profissionalBean.pessoa.nome}"
						size="100" maxlength="100" required="true" requiredMessage="Informe o nome">
					</p:inputText>
			
					<h:outputLabel value="Sexo *" for="sexo"/>
					<p:selectOneMenu id="sexo" value="#{profissionalBean.profissional.sexo}"
						required="true" requiredMessage="Informe o sexo">
						<f:selectItem itemValue="" itemLabel="Selecione o sexo"/>
						<f:selectItem itemValue="M" itemLabel="Masculino"/>
						<f:selectItem itemValue="F" itemLabel="Feminino"/>
					</p:selectOneMenu>					
					  
					<h:outputLabel value="Logradouro *" for="logradouro"/>
					<p:inputText id="logradouro" value="#{profissionalBean.pessoa.logradouro}"
						size="100" maxlength="100" required="true" requiredMessage="Informe o logradouro">
					</p:inputText>
					
					<h:outputLabel value="Número" for="numero"/>
					<p:inputText id="numero" value="#{profissionalBean.pessoa.numero}"
						size="20" maxlength="20" required="false">
					</p:inputText>
					
					<h:outputLabel value="Complemento" for="complemento"/>
					<p:inputText id="complemento" value="#{profissionalBean.pessoa.complemento}"
						size="20" maxlength="20" required="false">
					</p:inputText>

					<h:outputLabel value="Estado *" for="estado"/>
					<h:panelGroup id="pngestado">
						<p:selectOneMenu id="estado"						 
							value="#{profissionalBean.estadoSelecionado}" 
							converter="estadoConverter" 
							effect="fade" style="width:160px"
							required="true" requiredMessage="Selecione um estado">  						
							<f:selectItem itemLabel="Selecione um estado" itemValue="" />  
							<f:selectItems value="#{profissionalBean.estadosCadastrados}" var="estado" 
								itemLabel="#{estado.nome}" itemValue="#{estado}"/>  						
							<p:ajax event="change" listener="#{profissionalBean.carregarCidades}"  update="pngcidade"/>												
						</p:selectOneMenu>
					</h:panelGroup>																																 

					<h:outputLabel value="Cidade *" for="cidade"/>
					<h:panelGroup id="pngcidade">
						<p:selectOneMenu id="cidade" 
							value="#{profissionalBean.cidadeSelecionada}" 
							converter="cidadeConverter" 
							effect="fade" style="width:160px"
							required="true" requiredMessage="Selecione uma cidade">  						
							<f:selectItem itemLabel="Selecione uma cidade" itemValue="" />  
							<f:selectItems value="#{profissionalBean.cidades}" var="cidade" 
								itemLabel="#{cidade.nome}" itemValue="#{cidade}"/>						  												  					
						</p:selectOneMenu>
					</h:panelGroup>													
					
					<h:outputLabel value="Bairro *" for="bairro"/>
					<p:inputText id="bairro" value="#{profissionalBean.pessoa.bairro}"
						size="50" maxlength="50" required="true" requiredMessage="Informe o bairro">
					</p:inputText>					
							
					<h:outputLabel value="CEP" for="cep"/>
					<p:inputMask id="cep" value="#{profissionalBean.pessoa.cep}" 
						mask="99999-999" converter="cepConverter"
						validatorMessage="Informe um CEP válido">
					</p:inputMask>  

					<h:outputLabel value="Telefone 1" for="telefone1"/>
					<p:inputMask id="telefone1" value="#{profissionalBean.pessoa.telefone1}" 
						mask="(99)9999-9999" 
						converter="telefoneConverter"
						validatorMessage="Telefone 1 inválido">
					</p:inputMask>

					<h:outputLabel value="Telefone 2" for="telefone2"/>
					<p:inputMask id="telefone2" value="#{profissionalBean.pessoa.telefone2}" 
						mask="(99)9999-9999" 
						converter="telefoneConverter"
						validatorMessage="Telefone 2 inválido">
					</p:inputMask>

					<h:outputLabel value="Email *" for="email"/>
					<p:inputText id="email" value="#{profissionalBean.pessoa.email}"
						maxlength="100" size="100"
						required="true" requiredMessage="Informe o email"
						validatorMessage="Informe um email válido">
					</p:inputText>

					<h:outputLabel value="Conselho *" for="conselho"/>
					<h:panelGroup id="pngconselho">
						<p:selectOneMenu id="conselho"						 
							value="#{profissionalBean.conselhoSelecionado}" 
							converter="conselhoConverter" 
							effect="fade" style="width:180px"
							required="true" requiredMessage="Selecione um conselho">  						
							<f:selectItem itemLabel="Selecione um conselho" itemValue="" />  
							<f:selectItems value="#{profissionalBean.conselhosCadastrados}" var="conselho" 
								itemLabel="#{conselho.descricao}" itemValue="#{conselho}"/>  																		
						</p:selectOneMenu>
					</h:panelGroup>						
					
					<h:outputLabel value="Registro *" for="registro"/>
					<p:inputText id="registro" value="#{profissionalBean.profissional.registroConselho}"
						maxlength="50" size="50"
						required="true" requiredMessage="Informe o registro no conselho">
					</p:inputText>
						
					<h:outputLabel value="UF *" for="ufconselho"/>
					<h:panelGroup id="pngufconselho">
						<p:selectOneMenu id="ufconselho"						 
							value="#{profissionalBean.estadoConselho}" 
							converter="estadoConverter" 
							effect="fade" style="width:160px"
							required="true" requiredMessage="Selecione um estado">  						
							<f:selectItem itemLabel="Selecione um estado" itemValue="" />  
							<f:selectItems value="#{profissionalBean.estadosCadastrados}" var="estado" 
								itemLabel="#{estado.nome}" itemValue="#{estado}"/>  																		
						</p:selectOneMenu>
					</h:panelGroup>

											
                </h:panelGrid>
            
				<!-- Criar form para manipulação das especializações. Olhar cadastros auxiliares -->
				<h:panelGrid columns="3">
				
					<h:outputLabel value="Especialização *" for="especializacao"/>				
					<h:panelGroup id="pngespecializacao">
						<p:selectOneMenu id="especializacao"						 
							value="#{profissionalBean.especializacaoSelecionada}" 
							converter="especializacaoConverter" 
							effect="fade" style="width:200px">  						
							<f:selectItem itemLabel="Selecione uma especialização" itemValue="" />  
							<f:selectItems value="#{profissionalBean.especializacoesCadastradas}" var="especializacao" 
								itemLabel="#{especializacao.descricao}" itemValue="#{especializacao}"/>
							<!-- 
								O evento é disparado apenas para atribuir o valor selecionado à especializacaoSelecionada
							 	O botão vai adicionar a especialização na lista
							-->	
							<p:ajax event="change"/>
						</p:selectOneMenu>
					</h:panelGroup>
																						
					<p:commandButton action="#{profissionalBean.adicionarEspecializacao}" value="Adicionar" icon="ui-icon-check" style="margin:0"
						process="@this" update="especializacao dttespecializacoes"/>								
						
				</h:panelGrid>
					
	   			<p:dataTable id="dttespecializacoes" var="especializacao" value="#{profissionalBean.especializacoesDoProfissional}"  
	                	emptyMessage="Nenhuma especialização adicionada">
	                		  
			        <p:column headerText="Descrição" sortBy="#{especializacao.descricao}">  
			            <h:outputText value="#{especializacao.descricao}" />  
			        </p:column>
	
			        <p:column headerText="Remover" style="text-align: center;">	     	        				        		        						        
			        	<p:commandLink action="#{profissionalBean.removerEspecializacao}" update="dttespecializacoes" process="@this">
			        		<h:graphicImage library="imagens" name="excluir.png" style="border:0;"/>
			        		<f:setPropertyActionListener value="#{especializacao}" target="#{profissionalBean.especializacaoSelecionada}"/>
			        	</p:commandLink>			        		        			
			        </p:column>	        				       
	      						               						               						        
	            </p:dataTable>
            			                
            	<br/>		                
                <p:commandButton action="#{profissionalBean.salvar}" value="Salvar" ajax="false" icon="ui-icon-check" style="margin:0"/>
			</h:form>
																		
		</p:panel>
		
	</ui:define>
</ui:composition>

ManagedBean:

package skymedic.profissionaldesaude;

import java.util.ArrayList;
import java.util.List;

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

import sistemasas.endereco.Estado;
import skymedic.conselho.Conselho;
import skymedic.conselho.ConselhoBusiness;
import skymedic.conselho.ConselhoFactory;
import skymedic.especializacao.Especializacao;
import skymedic.especializacao.EspecializacaoBusiness;
import skymedic.especializacao.EspecializacaoFactory;
import skymedic.pessoa.PessoaBean;
import skymedic.utils.ExibeMensagem;

@ManagedBean(name="profissionalBean")
@ViewScoped
public class ProfissionalDeSaudeBean extends PessoaBean {
    
    private final String PAGINA_PROFISSIONAL_CADASTRO = "profissionalcadastro";
    private final String PAGINA_PROFISSIONAL_EDICAO = "/global/profissionalcadastro?faces-redirect=true&includeViewParams=true";
    private final String PAGINA_PROFISSIONAL_LISTA = "profissionallista";           
    
    private ProfissionalDeSaude profissional;
    
    private List<ProfissionalDeSaude> profissionaisCadastrados;
    private List<ProfissionalDeSaude> profissionaisConsultados;
        
    private List<Especializacao> especializacoesCadastradas;
    private List<Especializacao> especializacoesDoProfissional;
    private Especializacao especializacaoSelecionada;
    
    
    private List<Conselho> conselhosCadastrados;
    private Conselho conselhoSelecionado;
    
    private Estado estadoConselho;

    @PostConstruct
    private void iniciarProfissionalDeSaudeBean() {
	
	this.profissional = ProfissionalDeSaudeFactory.criarProfissionalDeSaude();
	
	this.profissionaisCadastrados = null;
	
	this.profissionaisConsultados = null;
	
	this.especializacaoSelecionada = null;
	
	this.especializacoesCadastradas = null;
	
	this.especializacoesDoProfissional = null;
	
	this.conselhosCadastrados = null;
	
	this.conselhoSelecionado = null;
	
	this.estadoConselho = null;
	
	iniciarPessoaBean();
	
    }

    public ProfissionalDeSaude getProfissional() {
	
        return profissional;
        
    }

    public void setProfissional(ProfissionalDeSaude profissional) {
	
        this.profissional = profissional;
        this.conselhoSelecionado = this.profissional.getConselho();
        this.estadoConselho = this.profissional.getUfConselho();
        this.especializacoesDoProfissional = this.profissional.getEspecializacoes();
        setPessoa(this.profissional.getPessoa());
        
    }
           
    public List<ProfissionalDeSaude> getProfissionaisConsultados() {
	
        return profissionaisConsultados;
        
    }

    public void setProfissionaisConsultados(List<ProfissionalDeSaude> profissionaisConsultados) {
	
        this.profissionaisConsultados = profissionaisConsultados;
        
    }
    
    public Especializacao getEspecializacaoSelecionada() {
	
        return especializacaoSelecionada;
        
    }

    public void setEspecializacaoSelecionada(Especializacao especializacaoSelecionada) {
	
        this.especializacaoSelecionada = especializacaoSelecionada;
        
    }
    
    public Conselho getConselhoSelecionado() {
	
        return conselhoSelecionado;
        
    }

    public void setConselhoSelecionado(Conselho conselhoSelecionado) {
	
        this.conselhoSelecionado = conselhoSelecionado;
        
    }
       
    public Estado getEstadoConselho() {
	
        return estadoConselho;
        
    }

    public void setEstadoConselho(Estado estadoConselho) {
	
        this.estadoConselho = estadoConselho;
        
    }

    public List<ProfissionalDeSaude> getListagem() {
	
	if (this.profissionaisCadastrados == null) {
	    
	    ProfissionalDeSaudeBusiness business = ProfissionalDeSaudeFactory.criarProfissionalBusiness();
	    this.profissionaisCadastrados = business.listar();
	    
	}
	
	return this.profissionaisCadastrados;
	
    }
    
    public List<Especializacao> getEspecializacoesCadastradas() {
	
	if (this.especializacoesCadastradas == null) {
	    
	    EspecializacaoBusiness especializacaoBusiness = EspecializacaoFactory.criarEspecializacaoBusiness();
	    this.especializacoesCadastradas = especializacaoBusiness.listar();
	    
	}
	
	return this.especializacoesCadastradas;
	
    }
    
    public List<Conselho> getConselhosCadastrados() {
	
	if (this.conselhosCadastrados == null) {
	    
	    ConselhoBusiness conselhoBusiness = ConselhoFactory.criarConselhoBusiness();
	    this.conselhosCadastrados = conselhoBusiness.listar();
	    
	}
	
	return this.conselhosCadastrados;
	
    }
    
    public List<Especializacao> getEspecializacoesDoProfissional() {
	
	if (this.especializacoesDoProfissional == null) {
	    
	    this.especializacoesDoProfissional = new ArrayList<Especializacao>();
	    
	}
	
	return this.especializacoesDoProfissional;
	
    }
    
    public String novo() {
	
	return PAGINA_PROFISSIONAL_CADASTRO;
	
    }
    
    public String editar() {
	
	return PAGINA_PROFISSIONAL_EDICAO;
	
    }

    public String salvar() {
	
	try {
	    
	    this.profissional.setPessoa(getPessoa());
	    this.profissional.setConselho(this.conselhoSelecionado);
	    this.profissional.setUfConselho(this.estadoConselho);
	    this.profissional.setEspecializacoes(this.especializacoesDoProfissional);
	    	    
	    ProfissionalDeSaudeBusiness business = ProfissionalDeSaudeFactory.criarProfissionalBusiness();
	    
	    business.salvar(this.profissional);
	
	    iniciarProfissionalDeSaudeBean();
	    
	    ExibeMensagem.exibirMensagemOK("Profissional de saúde gravado com sucesso");
	    
	    return PAGINA_PROFISSIONAL_LISTA;
	    
	} catch(Exception e) {
	    
	    ExibeMensagem.exibirMensagemErro(e.getMessage().split(System.getProperty("line.separator")));
	    
	}
	
	return null;
	
    }    
    
    public String excluir() {
	
	try {
	    
	    ProfissionalDeSaudeBusiness business = ProfissionalDeSaudeFactory.criarProfissionalBusiness();
	    
	    business.excluir(this.profissional);
	    
	    iniciarProfissionalDeSaudeBean();
	    
	    ExibeMensagem.exibirMensagemOK("Profissional de saúde excluido com sucesso");
	    
	    return PAGINA_PROFISSIONAL_LISTA;
	    
	} catch(Exception e) {
	    
	    ExibeMensagem.exibirMensagemErro(e.getMessage().split(System.getProperty("line.separator")));
	    
	}
	
	return null;
	
    }
    
    public void adicionarEspecializacao() {
	
	if (this.especializacaoSelecionada != null) {
	
	    if (! this.especializacoesDoProfissional.contains(this.especializacaoSelecionada)) {
		    
		this.especializacoesDoProfissional.add(this.especializacaoSelecionada);
		    
	    }
		
	    this.especializacaoSelecionada = null;	    
	    
	}
		
    }
    
    public void removerEspecializacao() {
	
	boolean removeu = this.especializacoesDoProfissional.remove(this.especializacaoSelecionada);
	
	if (removeu) {
	
	    this.especializacaoSelecionada = null;
	    
	}
		
    }

                
}