Olá Pessoal,
Estou testando/estudando o Primefaces e JSF2.0 antes eu usava o JSF 1.2 com MyFaces Tomahawk, montei
meu ambiente no eclipse Helios, Jboss Tools, Jboss 6, EJB3 e ja coloquei o Primefaces 3.0, mas a duvida q estou
acho que independe do ambiente, vamus lá
montei um formulario dentro dele um p:tree e um commandbutto para acionar um p:dialog onde eu posso
editar o registro selecionado no TREE ou até mesmo incluir novos registros, até ai tudo blz, o problema
é que por exemplo se o usuário deixar de preencher algum campo obrigatório no form dentro do dialogo
é mostrado a msg de campo requerido, mas o dialogo é fechado mesmo assim e na verdade eu gostaria
de manter o dialogo aberto até que o registro seja salvo corretamente ou o usuário cancele a edição.
segue o código fonte da minha página xhtml:
		<p:growl id="growl" showDetail="true" sticky="false" life="10000"/>  
		<h:form id="frmNode">
			<h:panelGrid columns="1" id="pnePlanoContas" styleClass="center">
				<p:tree 
					id="treePlanoContas" 
					value="#{mbCadCtaCtb.planoDeContas}" 
					var="node"
		            selectionMode="single"
		            update="frmCadCtb:pneFormCadCtb growl"
		            expandAnim="FADE_IN" collapseAnim="FADE_OUT"
		            selection="#{mbCadCtaCtb.selectedNode}"
		            nodeSelectListener="#{mbCadCtaCtb.aoSelecionarConta}">  
			        <p:treeNode 
			            type="mae" 
			        	expandedIcon="ui-icon ui-icon-folder-open"
	                    collapsedIcon="ui-icon ui-icon-folder-collapsed">
			            <h:outputText value="#{node.codigo} - #{node.nome}" />
			        </p:treeNode>
			        <p:treeNode type="filha" icon="ui-icon ui-icon-document">  
            			<h:outputText value="#{node.codigo} - #{node.nome}" styleClass="documentStyle"/>  
        			</p:treeNode> 
		    	</p:tree>
		    	<f:facet name="footer">
					<p:commandButton 
                                               value="Editar"    image="ui-icon-pencil" update="growl" 
                                               ajax="true" actionListener="#{mbCadCtaCtb.editarConta}" 
                                               onsuccess="dlgEditConta.show()" />
					<p:commandButton value="Novo" image="ui-icon-circle-plus" 
                                                update="frmCadCtb:pneFormCadCtb growl" ajax="true" 
                                                actionListener="#{mbCadCtaCtb.novaContaContabilAjax}" 
                                                onsuccess="dlgEditConta.show()" />
					<p:commandButton
						id="cmdExcluir" 
						value="Excluir" 
						image="ui-icon-trash"
						update="frmNode:pnePlanoContas growl"
						actionListener="#{mbCadCtaCtb.excluirConta}" />
		    	</f:facet>
	    	</h:panelGrid>
    	</h:form>
		<p:dialog header="Conta Contábil" widgetVar="dlgEditConta"  height="180" width="400" showEffect="explode" hideEffect="explode" >  
			<h:form id="frmCadCtb">
				<h:panelGrid columns="3" id="pneFormCadCtb">
					<h:outputText value="Conta Superior: " />  
			        <h:selectOneMenu 
			        	value="#{mbCadCtaCtb.contaEmEdicao.contaSuperior.id}"
			           	id="cboContaSuperior"
			           	effect="drop"
			           	required="true" 
			           	requiredMessage="Conta Superior deve ser Informada">  
						<f:selectItem itemValue="" itemLabel="Selecione..." />
			            <f:selectItems value="#{mbCadCtaCtb.listContasSup}"/>
			        </h:selectOneMenu>
				    <h:message for="cboContaSuperior" showDetail="false"/>
					<h:outputText value="Codigo:" />
					<h:inputText id="txtCodCta"  value="#{mbCadCtaCtb.contaEmEdicao.codigo}" required="true" requiredMessage="Codigo da conta deve ser informado" />
			        <h:message for="txtCodCta" showDetail="false"/>
					<h:outputText value="Nome:" />
					<h:inputText id="txtNomCta" value="#{mbCadCtaCtb.contaEmEdicao.nome}" size="50" required="true" requiredMessage="Nome da conta deve ser informado" />
			        <h:message for="txtNomCta" showDetail="false"/>
					<h:outputText value="Tipo de Lançamento Aceitos: " />  
			        <h:selectOneMenu 
			        	value="#{mbCadCtaCtb.contaEmEdicao.tipoLancamento}"
			           	id="cboTipoLancamento"
			           	required="true" 
			           	requiredMessage="Tipo de Lançamento deve ser Informado">  
						<f:selectItem itemValue="A" itemLabel="Ambos" itemDescription="Aceita lançamentos a débito e a crédito" />
						<f:selectItem itemValue="D" itemLabel="Lançamentos a Débito" />
						<f:selectItem itemValue="A" itemLabel="Lançamentos a Crédito" />
						<f:selectItem itemValue="A" itemLabel="Não Aceita Lançamentos" />
			        </h:selectOneMenu>
					<h:outputText value="Histórico Padrão Débito:" />
					<h:inputText id="txtHisPdrDeb" value="#{mbCadCtaCtb.contaEmEdicao.historicoDebito}" size="50" required="false" />
			        <h:message for="txtHisPdrDeb" showDetail="false"/>
					<h:outputText value="Histórico Padrão Crédito:" />
					<h:inputText id="txtHisPdrCre" value="#{mbCadCtaCtb.contaEmEdicao.historicoCredito}" size="50" required="false" />
			        <h:message for="txtHisPdrCre" showDetail="false"/>
			        <f:facet name="footer">
						<p:commandButton 
							id="cmdSalvar"
							value="Salvar" 
							image="ui-icon ui-icon-circle-check"
							update="frmNode:pnePlanoContas growl"
							actionListener="#{mbCadCtaCtb.salvarConta}" />
						<p:commandButton
							id="cmdReset" 
							image="ui-icon ui-icon-arrowreturnthick-1-w" type="reset" value="Limpar Campos" ajax="false"/>
						<p:commandButton image="ui-icon ui-icon-circle-close" action="formListContaContabil" ajax="false" immediate="true"/>
			        </f:facet>
	        	</h:panelGrid>
	        </h:form>
		</p:dialog> 
segue tb um trecho do managedbean, mais especificamente o metodo acionado pelo botao salvar (mbCadCtaCtb.salvarConta) que salva o registro
@SessionScoped
@ManagedBean(name="mbCadCtaCtb")
public class MBCadCtaCtb implements Serializable
{
	@EJB
	private Contab				beanContab;
        private ContaContabil 		contaEmEdicao = new ContaContabil();
     (...)
    public void salvarConta(ActionEvent ae) throws Exception
    {
    	FacesContext context = FacesContext.getCurrentInstance();
    	
    	try
	{
    		beanContab.salvarContaContabil(contaEmEdicao);
    		contaEmEdicao = null;
    		atualizar=true;
    		context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Registro Salvo com sucesso.",""));  
	}
	catch (Exception e)
	{
    		context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Falha ao Salvar Registro.",e.getMessage()));  
    		throw e;
	}
    }
    public void editarConta(ActionEvent eve)
    {
    	FacesContext context = FacesContext.getCurrentInstance();
    	if (this.selectedNode==null)
    	{
    		context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,"Selecione a conta que deseja editar.",""));
    		return;
    	}
    		
    	this.contaEmEdicao= (ContaContabil)(this.selectedNode.getData());
    }
}é isso se alguem puder ajudar…
[]s
