Erro em Cadastro MB

Estou fazendo uma tela de cadastro de clientes.
O cliente possui um município vinculado.
Na tela de cadastro, haverá um selectOneMenu para selecionar o país, depois outro selectOneMenu para selecionar o estado e finalmente o selectOneMenu para selecionar o município, que é o que interessa para a classe e tabela de clientes.

Vejam como está no meu xhtml:

					 <h:outputLabel for="pais" value="País:" />
					 <p:selectOneMenu id="pais" value="#{paisController.pais}" >
						<f:selectItem itemLabel="Selecione..." itemValue="" />
						<f:selectItems value="#{paisController.paises}" var="p" itemLabel="#{p.nome}" itemValue="#{p}"/>						
						<p:ajax event="change" listener="#{paisController.actionCarregaUfs}" update="uf" />
					 </p:selectOneMenu>
					 <h:outputLabel for="uf" value="UF:" />
					 <p:selectOneMenu id ="uf" value ="#{unidadeFederacaoController.uf}" >
						<f:selectItem itemLabel="Selecione..." itemValue="" />
						<f:selectItems value="#{paisController.ufs}" var="uf" itemLabel="#{uf.nome}" itemValue="#{uf}" /> 
						<p:ajax event="change" listener="#{unidadeFederacaoController.actionCarregaMunicipios}" update="municipio" />												
					 </p:selectOneMenu>
					 <h:outputLabel for="municipio" value="Município:" />
					 <p:selectOneMenu id="municipio" value="#{clienteController.cliente.municipio}" >
						<f:selectItem itemLabel="Selecione..." itemValue="" />
						<f:selectItems value="#{unidadeFederacaoController.municipios}" var="municipio" itemLabel="#{municipio.nome}" itemValue="#{municipio}" /> 												
					 </p:selectOneMenu>

Percebam que estou utilizando dois MB a parte para guardar o id do país selecionado e outro para guardar o id do estado selecionado. E isso está me causando problemas. Quando eu seleciono algum país para se chegar até a cidade, o MB clienteController deixa de executar o método de adicionar o cliente ao banco. Simplesmente não chama o método, e não aparece erro algum no console.

Se eu não usar os combobox de país e estado e município, o método chama normalmente e o cliente é inserido.
Se eu informar país, estado e município, o método não executa…

Por que você tem 3 ManagedBeans separados pra isso? Isso realmente é necessário?

E outra coisa, faltou a tag ajax no seu último selectOneMenu simplesmente para pegar o dado novo. Isso pode evitar preocupações. Uma tag assim:<p:ajax event="change" process="@this" update="@this" />Se não me engano o process="@this" é default, então pode ser omitido.

Eu fiz um managed bean para cada entidade.
O managed bean PaisController tem um método que lista os estados conforme país selecionado.
O managed bean UnidadeFederacaoController tem um método que lista as cidades conforme UF selecionada.
Eu pensei que fazendo assim não haveria problema algum e também evita que o managed bean ClienteController tenha métodos que na verdade não tem nada a ver com a entidade Cliente.
Sei lá, posso estar errado no meu pensamento…
Qual o problema de fazer desse jeito que estou fazendo?

Eu vejo ManagedBeans de maneira diferente. Eles não estão relacionados à entidade, e sim à funcionalidade em questão.

Se você tem um cadastro de clientes, tem um ClienteMB que vai fazer a comunicação dessa tela com a sua camada de serviço. não vejo ManagedBeans tendo um relacionamento único com a entidade.

Sim, acredito que você esteja certo.
Acredito também que há diversas formas de programar para se chegar a uma solução.
Mas enfim… esse erro que acontece comigo é estranho demais, porque não aparece nenhuma mensagem no console, estou de mãos atadas sem saber o que fazer. A princípio não tem lógica o método do MB deixar de executar por causa de um combobox.

Pode ser que alguma requisição ajax sua esteja causando o problema, tente analisar as chamadas pelo console do navegador

Farei isso…
O escopo do MB não causaria esse tipo de problema, certo? Na verdade ainda não consigo avaliar qual escopo eu devo utilizar. Tem algum material “entendível” que possa me ajudar com isso?

Eu não acredito que causaria não. O fato de “nem invocar o método” que me parece curioso.

Eu não sei dizer se tem algum lugar com a informação que você quer exatamente. Mas existem livros. como o do Hébert Coelho que explicam isso e muito mais.

Acabei de constatar que o erro só acontece no navegador chrome. No IE funciona normalmente, o método “adicionarCliente” é invocado.
Alguém tem explicação pra isso?