i have a dialog with two input fields and a commandButton, to add an object. If the user leaves a blank field a message growl is shown and the dialog stays open. But if the user completes all the fields and press the commandButton the object is added but the dialog doesn't close.
View.xhtml
<h:form id="allIncidenciasAux">
<div id="divBotonCrear">
<p:commandButton value="Añadir Incidencia" type="button" onclick="PF('dlg1').show();"/>
</div> <br/>
<p:tabView>
<p:tab title="All">
<ui:repeat value="#{incidenciaBean.allIncidencias}" var="aux" >
<p:panel id="basic" header="#{aux.titulo}" style="margin-bottom:20px" toggleable="true" collapsed="true" styleClass="#{ aux.solucionado eq 'false' ? 'incNS' : null}">
<h:panelGrid columns="2">
<h:panelGrid style="background-color: #B6C2DE; padding: 10px;">
<h:panelGrid columns="2">
<h:outputText value="Fecha de publicacion: " style="font-weight: bold"/>
<h:outputText value="#{aux.fecha_publicacion}"/>
</h:panelGrid>
<h:panelGrid columns="2">
<h:outputText value="Autor: " style="font-weight: bold"/>
<h:outputText value="#{aux.nombreCompleto}"/>
</h:panelGrid>
<h:panelGrid columns="2">
<h:outputText value="Solucionado: " style="font-weight: bold"/>
<h:outputText value="#{aux.solucionado ? 'Si' : 'No'}"/>
</h:panelGrid>
</h:panelGrid>
<h:panelGrid>
<h:outputText value="Descripción: " style="font-weight: bold"/>
<h:outputText value="#{aux.descripcion}"/>
</h:panelGrid>
</h:panelGrid> <br/>
</p:panel>
</ui:repeat>
</p:tab>
</p:tabView>
<p:growl id="growl" showDetail="true" sticky="false" life="8000"/>
</h:form>
<h:form id="dialogAddIncidencia">
<p:dialog id="newIncDialogo" header="Nueva Incidencia" widgetVar="dlg1" minHeight="40" resizable="false">
<p:ajax event="close" listener="#{incidenciaBean.handleClose}" update=":dialogAddIncidencia"/>
<p:outputLabel value="Título"/> <br/>
<p:inputTextarea id="tituloEdit" value="#{incidenciaBean.titulo}" rows="2" cols="50" counter="displayTA" maxlength="50" counterTemplate="{0} caracteres restantes" autoResize="true" required="true" requiredMessage="Título necesario"/> <br/>
<p:outputLabel id="displayTA"/> <br/> <br/>
<p:outputLabel value="Descripción: "/> <br/>
<p:inputTextarea id="descripcion" value="#{incidenciaBean.descripcion}" rows="10" cols="50" counter="displayDA" maxlength="200" counterTemplate="{0} caracteres restantes" autoResize="true" required="true" requiredMessage="Descripción necesaria"/> <br/>
<p:outputLabel id="displayDA"/> <br/> <br/>
<p:commandButton value="Guardar Incidencia" action="#{incidenciaBean.insertIncidencia()}" oncomplete="if (#{incidenciaBean.camposNoVacios()}) dlg1.hide()" update=":allIncidenciasAux :allIncidenciasAux:growl"/>
<p:messages for="titulo"/>
<p:messages for="descripcion"/>
</p:dialog>
</h:form>
Methods of incidenciaBean.java
public void insertIncidencia(){
HttpSession httpSession = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
UsuarioBean usuarioHttp = (UsuarioBean) httpSession.getAttribute("usuarioSession");
this.idComunidad = usuarioHttp.idComunidad;
this.idUsuario = usuarioHttp.getIdUsuario();
this.solucionado = false;
this.fecha_solucion = null;
DateFormat dateFormat = new SimpleDateFormat("DD-MM-YYYY");
Date date = new Date();
this.fecha_publicacion = dateFormat.format(date);
if(ejb_incidencia.existIncidenciaTitulo(this.titulo, this.descripcion)){
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error:",
"Ya existe una incidencia con el mismo título y descripción."
+ "Por favor, compruebe que no se trata de la misma incidencia."));
} else{
ejb_incidencia.realizaRegistroIncidencia(this);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Info:",
"La incidencia se ha registrado correctamente"));
initialStatusIncidencia();
}
}
public boolean camposNoVacios(){
return !(this.titulo == null || this.descripcion == null);
}
public void initialStatusIncidencia(){
this.titulo = null;
this.descripcion = null;
}
public void handleClose (CloseEvent event){
initialStatusIncidencia();
}