Olá Pessoal !!!
Tenho um exemplo de formulário de cadastro que grava corretamente, mas gostaria de limpar os registros dele ao fechar. Segue o código de como chamo o form.
<p:layoutUnit position="left" width="200" header="Atividades" resizable="true" closable="true" collapsible="true">
<h:form prependId="false">
<p:commandButton value="Novo"
action="#{PastelMB.novoPastel}"
update="gerNovo, formCad, infoCad"
oncomplete="dialogCad.show()" />
</h:form>
</p:layoutUnit>
No MB
public void novoPastel(){
pastel = new Pastel();
System.out.println("Criando novo");
}
E o dialog
<p:dialog header="Gerência" widgetVar="dialogCad"
resizable="false" modal="true" width="500">
<p:outputPanel id="gerNovo">
<h:form prependId="false" id="formCad">
<p:messages id="avisoCad"/>
<h:panelGrid id="infoCad" columns="2" style="margin-bottom:10px">
<h:outputLabel value="Nome:"/>
<h:inputText id="nomeCad" value="#{PastelMB.pastel.nome}"
required="true" requiredMessage="Campo [Nome] obrigatório">
<f:validateLength minimum="2" maximum="100" />
</h:inputText>
<h:outputLabel value="Tamanho:"/>
<h:inputText id="tamanhoCad" value="#{PastelMB.pastel.tamanho}"
required="true" requiredMessage="Campo [Tamanho] obrigatório">
<f:validateLength maximum="100" />
</h:inputText>
<p:commandButton value="Salvar"
actionListener="#{PastelMB.cadastra}"
oncomplete="dialogCad.show(); "
update="formCad"
/>
<p:commandButton oncomplete="dialogCad.hide();"
value="Cancelar" />
</h:panelGrid>
</h:form>
</p:outputPanel>
</p:dialog>
Problema que quando fecho o dialog e abro novamente os dados dos campos continuam. Exibe a mensagem “Criando novo” portando passa por ali. O que posso fazer para corrigir ?
Obrigado
no seu método após salvar. reinicia novamente seu objeto.
objeto=new Objeto();
dentro do seu metodo cadastra, chame o metodo novo e de um update no panel
Certo. Ao cadastrar funciona.
Problema é se cancelar o form e abrir novamente. Acredito que poderia ser algo no evento onHide do dialog. Mas por ele não consigo chamar #{PastelMB.novoPastel}.
Mas como no botão “novo” já instancia acredito que nem precisaria isso.
Meu problema persiste. Ao abir o dialog digitar e fechar a janela funciona normalmente. Mas se eu deixar um campo obrigatório, por exemplo, permanece na mesma janela. Aí se eu fechar e abrir novamente lá estão os dados que eu digitei e não deveria aparecer.
Código ficou assim atualmente:
<p:dialog header="Cadastro de Pastel" widgetVar="dialogCad"
resizable="false" modal="true" width="500">
<h:form prependId="false" id="formCad" >
<p:messages id="avisoCad"/>
<h:panelGrid id="infoCad" columns="2" style="margin-bottom:10px">
<h:outputLabel value="Nome:"/>
<h:inputText id="nomeCad" value="#{PastelMB.pastel.nome}"
required="true" requiredMessage="Campo [Nome] obrigatório" >
<f:validateLength minimum="2" maximum="100" />
</h:inputText>
<h:outputLabel value="Tamanho:"/>
<h:inputText id="tamanhoCad" value="#{PastelMB.pastel.tamanho}"
required="true" requiredMessage="Campo [Tamanho] obrigatório" >
<f:validateLength maximum="100" />
</h:inputText>
<p:commandButton value="Salvar"
actionListener="#{PastelMB.cadastra}"
oncomplete="dialogCad.show();"
update="tabelaPastel, formCad">
</p:commandButton>
<p:commandButton oncomplete="dialogCad.hide();"
immediate="true"
update="formCad"
value="Cancelar">
</p:commandButton>
</h:panelGrid>
</h:form>
</p:dialog>
Você tem que achar uma lógica para dar o new Object() no seu bean dentro da sua neessidade.
Eu dou new toda vez que clico no botão “novo”. Uma causa quando ocorre erro no formulário pode ser que fica na memória. Algo assim. :?
Tente ao iniciar o metodo criar um novo objeto;
e ao salvar este objeto de um NULL nele, caso tenha lista de NULL nela tambem
acho que deve resolver…
O tópico é antigo… mas tive a mesma dúvida e acho que isso responde… utilizando um closeListener, exemplo do Show Case do Prime…
Na sua Página:
<p:growl id="growl" showDetail="true"/>
<p:growl id="growl" showDetail="true"/>
<h:outputLink value="javascript:void(0)" onclick="dlg.show()">Show the Picture of the Day</h:outputLink>
<p:dialog id="picture" widgetVar="dlg" header="Picture of the Day" width="425" height="300"
closeListener="#{dialogBean.handleClose}"
onCloseUpdate="growl"
resizable="false" showEffect="clip" hideEffect="clip">
<h:form>
<p:graphicImage value="/images/nature3.jpg" />
</h:form>
</p:dialog>
No seu Managed Bean
public class DialogBean {
public void handleClose(CloseEvent event) {
FacesContext facesContext = FacesContext.getCurrentInstance();
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
event.getComponent().getId() + " closed", "So you don't like nature?");
facesContext.addMessage(null, message);
}
}
Ressuscitando o tópico.
Precisei dessa solução, vou colocar a forma que eu utilizei para resolver o meu problema.
Page:
<p:commandButton value="Salvar" action="#{pessoaController.salvar}" update="@form" />
Java code:
public void salvar() {
pessoaService.save(product);
pessoa= new Pessoa();
}