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