Eu já fiz diversos testes nas minhas páginas em JSF2.0 e sempre ocorre o mesmo problema: o primeiro click a tela simplesmente pisca e no segundo click é que o BackingBean é chamado.
Eu uso JSF2 e Richfaces 4 com templates
Segue aqui um exemplo de uma pagina XHTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<f:view locale="#{localeController.currentLocale}">
<body>
<ui:composition template="/templates/template_menu.xhtml">
<ui:define name="title">#{msgs['titulo.sistema']}</ui:define>
<ui:define name="body">
<rich:panel id="popup" modal="true" resizeable="true" width="600"
height="400">
<f:facet name="header">
<h:outputText value="#{msgs['requerente.cadastro.titulo']}" />
</f:facet>
<h:form id="formCadastrarAct">
<h:outputText value="#{msgs['cadastro.act.id']}:" />
style="vertical-align:top;" />
<h:inputTextarea
value="#{actBB.act.id}}" id="nome"
required="true" size="40"
validatorMessage="#{msgs['requerente.mensagem.validacao.descricao']}"
requiredMessage="#{msgs['requerente.mensagem.validacao.descricao']}"
style=" height : 59px; width : 447px;">
<f:validateLength minimum="3" maximum="600" />
</h:inputTextarea>
<rich:message id="nomeMsg" for="desc" />
<h:outputText value="#{msgs['cadastro.act.nome']}:" />
<h:inputTextarea value="#{actBB.act.nome}}"
id="nome" required="true"
requiredMessage="#{msgs['requerente.mensagem.requerido.email']}"
style="height : 59px; width : 447px;">
</h:inputTextarea>
<rich:message id="nomeMsg" for="link" />
<h:outputText value="#{msgs['cadastro.act.dns']}:" />
<h:inputTextarea value="#{actBB.act.dns}}"
id="dns" required="true"
requiredMessage="#{msgs['requerente.mensagem.requerido.email']}"
style="height : 59px; width : 447px;">
</h:inputTextarea>
<rich:message id="dnsMsg" for="dns" />
<h:outputText value="#{msgs['cadastro.act.politica']}:" />
<h:inputTextarea value="#{actBB.act.politica}}"
id="politica" required="true"
requiredMessage="#{msgs['requerente.mensagem.requerido.email']}"
style="height : 59px; width : 447px;">
</h:inputTextarea>
<rich:message id="politicaMsg" for="politica" />
<br />
<br />
<a4j:commandButton action="#{actBB.salvar}" value="Salvar"
render="confirmaCadastro"
oncomplete="if(#{ataNotarialBB.ataSalva}) {#{rich:component('cadastroPane')}.show();}"/>
</h:form>
</rich:panel>
<rich:popupPanel id="cadastroPane" autosized="true">
<f:facet name="header">
<h:outputText value="#{msgs['requerente.cadastro.titulo']}" />
</f:facet>
<h:form>
<h:panelGroup id="confirmaCadastro">
#{msgs['act.mensagem.cadastro.sucesso']}<br />
<br />
<div align="center">
<h:commandButton value="OK"
action="#{clientesBean.acaoCadastroSucesso}" />
</div>
</h:panelGroup>
</h:form>
</rich:popupPanel>
<a4j:status onstart="#{rich:component('statPane')}.show()"
onstop="#{rich:component('statPane')}.hide()" />
<rich:popupPanel id="statPane" autosized="true">
<h:graphicImage value="/img/ai.gif" alt="ai" />
#{msgs['mensagem.aguarde']}
</rich:popupPanel>
</ui:define>
</ui:composition>
</body>
</f:view>
</html>