I'm using the component MasterDetail of the Primefaces Extensions (version 0.7.1) and I have problems...
The problem occurs when I work with a pop-up with a masterdetail for a period prolong of time (20 or 30 minutes). After this time the application look like dead, and don't respond to the invocation of process on the server. I note that the CPU keep executing operation, like it were in a bucle. In all this time I performed operations changing the levels in the masterdetail. I probe this acctions in a pop-up without masterdetail but the application works well.
This the code of the pop-up:
Code: Select all
<p:dialog id="dialogCircuAdjuntos"
widgetVar="dlgCircuAdjuntos" showEffect="clip" hideEffect="clip"
onShow="adjuntosDtb.onRowClick = onRowClickCustom;"
onHide="hayCambiosAdjuntosCirc=false"
header="Circularizacion - Adjuntos" resizable="false"
dynamic="true" modal="true">
<h:form id="formAltaCircuAdjuntos" enctype="multipart/form-data" >
<p:growl id="messagesCircuAdjuntos" showDetail="true" life="#{circularizaciones.lifeGrowl}" />
<p:remoteCommand name="updateTableAdjuntos" update="adjuntosDtb"></p:remoteCommand>
<pe:masterDetail id="masterDetail" style="width:800px;"
showAllBreadcrumbItems="false">
<pe:masterDetailLevel level="1" levelLabel="Inicio">
<h:panelGrid columns="4" id="pnlCabeceraCircularizacion">
<h:outputLabel for="txtTipoCircularizacion" value="Tipo de #{circularizaciones.labelCircularizacion}" />
<p:inputText id="txtTipoCircularizacion" disabled="true"
size="50"
value="#{circularizaciones.current.tipoLabel}"/>
<h:outputLabel for="txtEntidadPersona" value="Entidad/Persona" />
<p:inputText id="txtEntidadPersona" disabled="true"
size="50"
value="#{circularizaciones.current.entidad}"/>
<h:outputLabel for="txtCircuNro" value="#{circularizaciones.labelCircularizacion} Nro." />
<p:inputText id="txtCircuNro" disabled="true"
value="#{circularizaciones.current.numero}"/>
</h:panelGrid>
<p:panel header="Adjuntos">
<p:contextMenu for="adjuntosDtb" model="#{circularizaciones.modelDataTableAdjuntos}" />
<p:dataTable id="adjuntosDtb" var="adjunto"
value="#{circularizaciones.adjuntos}"
emptyMessage="#{circularizaciones.sinDatosMessage}"
widgetVar="adjuntosDtb" paginator="true" rows="#{circularizaciones.rows}"
paginatorTemplate="#{circularizaciones.paginatorTemplate}"
rowKey="#{adjunto.id}" selectionMode="single" selection="#{circularizaciones.adjuntoSelected}"
filteredValue="#{circularizaciones.adjuntosFiltered}" >
<p:ajax event="sort" listener="#{circularizaciones.cleanFilteredAdjuntos()}"
oncomplete="adjuntosDtb.filter()"></p:ajax>
<!-- <p:ajax event="filter" onstart="controlFoco=jQuery('#dialogCircuAdjuntos').find('.ui-state-focus');" -->
<!-- oncomplete="if (!focusCustomAuditoria(controlFoco)) {PrimeFaces.focus('dialogCircuAdjuntos');controlFoco=''}"></p:ajax> -->
<p:focus context="adjuntosDtb" />
<p:column headerText="Nombre de Archivo"
style="#{circularizaciones.styleColumn40}"
sortBy="#{adjunto.nombreArchivo.toUpperCase()}"
filterBy="#{adjunto.nombreArchivo}" filterMatchMode="contains">
<h:outputText value="#{adjunto.nombreArchivo}"
title="#{adjunto.nombreArchivo}"
converter="#{circularizaciones.converter40}" />
</p:column>
<p:column headerText="Archivo"
sortBy="#{adjunto.archivo.toUpperCase()}"
filterBy="#{adjunto.archivo}" filterMatchMode="contains">
<componentes:fileDownload entity="#{adjunto}" backBean="#{circularizaciones}"
id="downloadArchivo"
converter="#{circularizaciones.converter40}" />
</p:column>
<p:column headerText="Observaciones"
style="#{circularizaciones.styleColumn40}"
sortBy="#{adjunto.observacion.toUpperCase()}"
filterBy="#{adjunto.observacion}" filterMatchMode="contains">
<h:outputText value="#{adjunto.observacion}"
title="#{adjunto.observacion}"
converter="#{circularizaciones.converter40}" />
</p:column>
<p:column headerText="Fecha y Hora"
style="#{circularizaciones.styleColumn20}"
sortBy="#{adjunto.fechaHoraModificacion}" filterBy="#{adjunto.fechaHoraModificacion}"
filterMatchMode="contains">
<h:outputText value="#{circularizaciones.getFechaHoraString(adjunto.fechaHoraModificacion)}">
</h:outputText>
</p:column>
<p:column headerText="Auditor"
style="#{circularizaciones.styleColumn20}"
sortBy="#{adjunto.operadorAlta.nombreApellido.toUpperCase()}"
filterBy="#{adjunto.operadorAlta.nombreApellido}"
filterMatchMode="contains">
<h:outputText value="#{adjunto.operadorAlta.nombreApellido}"
title="#{adjunto.operadorAlta.nombreApellido}"
converter="#{circularizaciones.converter20}" />
</p:column>
<p:column style="width: 110px"
headerText="#{circularizaciones.getAccionesMensaje()}">
<p:outputPanel>
<p:commandButton title="Editar" id="btnEditarAdjunto"
icon="ui-icon-pencil" process="@this"
action="#{circularizaciones.editarAdjunto(adjunto)}">
<pe:selectDetailLevel level="2" preserveInputs="@all"/>
</p:commandButton>
</p:outputPanel>
<p:commandButton title="Eliminar" ajax="true" icon="ui-icon-close"
oncomplete="confirmDialogCircuAdjunto.show()" process="@this"
actionListener="#{circularizaciones.toDeleteAdjunto(adjunto)}"
disabled="#{legajos.onlyRead or legajos.legajo.cerradoCircularizacion}">
</p:commandButton>
</p:column>
</p:dataTable>
<h:panelGrid columns="3">
<p:commandButton title="Agregar"
value="Agregar" id="btnAgregarCircuAdjunto"
style="#{circularizaciones.styleButtons}" process="@this"
actionListener="#{circularizaciones.agregarAdjunto}" ajax="true"
immediate="true" disabled="#{legajos.onlyRead or legajos.legajo.cerradoCircularizacion}">
<pe:selectDetailLevel level="2"/>
</p:commandButton>
<p:commandButton title="Actualizar" id="btnActualizarCircuAdjunto"
style="#{circularizaciones.styleButtons}"
actionListener="#{circularizaciones.refreshAdjuntos()}"
ajax="true" oncomplete="updateTableAdjuntos();adjuntosDtb.filter()"
value="Actualizar">
</p:commandButton>
</h:panelGrid>
</p:panel>
<table style="width:100%">
<tr>
<td style="width:100%"></td>
<td>
<p:commandButton title="Cancelar" ajax="true" value="Cancelar"
type="button" onclick="dlgCircuAdjuntos.hide();"
style="#{circularizaciones.styleButtons}">
</p:commandButton>
</td>
</tr>
</table>
<p:confirmDialog id="confirmDialogCircuAdjunto"
message="#{circularizaciones.confirmDelete}" header="Eliminar"
severity="alert" widgetVar="confirmDialogCircuAdjunto" appendToBody="true">
<p:commandButton id="confirmDeleteCircuAdjunto" value="Confirmar"
ajax="true" process="@this"
oncomplete="updateTableAdjuntos();adjuntosDtb.filter();confirmDialogCircuAdjunto.hide();"
actionListener="#{circularizaciones.eliminarAdjunto(circularizaciones.adjuntoTemp)}"
style="#{circularizaciones.styleButtons}">
</p:commandButton>
<p:commandButton id="decline" value="Cancelar"
onclick="confirmDialogCircuAdjunto.hide()"
type="button" style="#{circularizaciones.styleButtons}" />
</p:confirmDialog>
<script type="text/javascript">
jQuery('#formAltaCircuAdjuntos\\:confirmDialogCircuAdjunto').eq(1).remove();
</script>
</pe:masterDetailLevel>
<pe:masterDetailLevel level="2" contextVar="a"
levelLabel="#{circularizaciones.getTituloAdjuntoAltaEdicionByModule(circularizaciones.moduleName)}">
<p:messages id="#{circularizaciones.idControlErrorAdjunto}" globalOnly="true" severity="error"></p:messages>
<p:focus for="txtNombre" rendered="#{not legajos.onlyRead and not legajos.legajo.cerradoCircularizacion}"></p:focus>
<p:panel header="#{circularizaciones.getTituloAdjuntoAltaEdicionByModule(circularizaciones.moduleName)}">
<pe:blockUI target="pnlCircuAdjunto" widgetVar="dlgCircuAdjuntosBlock" style="padding:;">
<h:outputLabel value="" />
</pe:blockUI>
<h:panelGrid columns="3" id="pnlCircuAdjunto">
<h:outputLabel for="txtTipoCircularizacion2"
value="Tipo de #{circularizaciones.labelCircularizacion}" />
<p:inputText id="txtTipoCircularizacion2" disabled="true"
size="75" maxlength="50"
value="#{circularizaciones.current.tipoLabel}"/>
<p:message id="msgTipoCircularizacion2" for="txtTipoCircularizacion2"/>
<h:outputLabel for="txtEntidadPersona2" value="Entidad / Persona" />
<p:inputText id="txtEntidadPersona2" disabled="true"
size="75" maxlength="50"
value="#{circularizaciones.adjuntoTemp.circularizacion.entidad}"/>
<p:message id="msgEntidadPersona2" for="txtEntidadPersona2"/>
<h:outputLabel for="txtCircuNro2" value="#{circularizaciones.labelCircularizacion} Nro." />
<p:inputText id="txtCircuNro2" disabled="true"
value="#{circularizaciones.adjuntoTemp.circularizacion.numero}"/>
<p:message id="msgCircuNro2" for="txtCircuNro2"/>
<h:outputLabel for="txtNombre" value="Nombre Archivo *" />
<p:inputText id="txtNombre"
value="#{circularizaciones.adjuntoTemp.nombreArchivo}"
maxlength="50" size="75"
required="true" onchange="hayCambiosAdjuntosCirc=true"
requiredMessage="Debe ingresar Nombre de Archivo." />
<p:message id="msgNombre" for="txtNombre" />
<h:outputLabel for="txtArchivo" value="Archivo *" />
<h:panelGroup>
<p:fileUpload id="txtArchivo" value="#{circularizaciones.adjuntoTemp.file}"
sizeLimit="#{circularizaciones.sizeLimit}"
mode="advanced" auto="true" label="Seleccionar"
required="true" requiredMessage="#{circularizaciones.archivoRequerido}"
fileUploadListener="#{circularizaciones.upload}"
update="txtArchivoNombre" oncomplete="hayCambiosAdjuntosCirc=true"/>
<p:inputText id="txtArchivoNombre" size="75" disabled="true"
value="#{circularizaciones.adjuntoTemp.nombreArchivoUpdate}"/>
</h:panelGroup>
<p:message id="msgArchivo" for="txtArchivoNombre" />
<h:outputLabel for="txtAdjuntoObservacion" value="Observaciones *" />
<p:inputTextarea id="txtAdjuntoObservacion"
onchange="hayCambiosAdjuntosCirc=true"
maxlength="200" cols="34" rows="3"
value="#{circularizaciones.adjuntoTemp.observacion}"
required="true" requiredMessage="Debe ingresar Observaciones."/>
<p:message id="msgObs" for="txtAdjuntoObservacion" />
</h:panelGrid>
<p:commandButton id="btnGuardarCircuAdjunto" style="width:100px" value="Guardar"
action="#{circularizaciones.guardarAdjunto}"
ajax="true" update="pnlCircuAdjunto"
process="txtAdjuntoObservacion,txtNombre,@this"
disabled="#{legajos.onlyRead or legajos.legajo.cerradoCircularizacion}"
oncomplete="if (args) {if (args.guardarSuccess) {hayCambiosAdjuntosCirc=false;}}" >
<pe:selectDetailLevel step="-1"/>
</p:commandButton>
<p:commandButton id="btnCancelarCirc" style="width:100px" process="@this"
oncomplete="adjuntosDtb.filter()"
onclick="if (cambiosAdjuntosCirc()) {confirmCancelarCircuAdjuntos.show();return false}"
value="Cancelar" title="Cancelar">
<pe:selectDetailLevel level="1"/>
</p:commandButton>
</p:panel>
<table style="width:100%">
<tr>
<td style="width:100%"></td>
<td>
<p:commandButton title="Cerrar" ajax="true" value="Cerrar"
type="button" onclick="if (cambiosAdjuntosCirc()) {confirmCerrarCircuAdjuntos.show();} else {dlgCircuAdjuntos.hide();}"
style="#{circularizaciones.styleButtons}">
</p:commandButton>
</td>
</tr>
</table>
<h:panelGroup rendered="#{legajos.onlyRead or legajos.legajo.cerradoCircularizacion}">
<script type="text/javascript">
dlgCircuAdjuntosBlock.block();
document.getElementById('formAltaCircuAdjuntos:btnCancelarCirc').focus();
</script>
</h:panelGroup>
<componentes:confirmCancelarInMasterDetail backBean="#{circularizaciones}"
id="confirmCancelarCircuAdjuntos"
onstart="hayCambiosAdjuntosCirc=false;adjuntosDtb.filter()"
widgetVar="confirmCancelarCircuAdjuntos"
idBtnConfirm="btnConfirmCancelarCircuAdjuntos"
idBtnDecline="btnDeclineCancelarCircuAdjuntos">
</componentes:confirmCancelarInMasterDetail>
<script type="text/javascript">
jQuery('#formAltaCircuAdjuntos\\:confirmCancelarCircuAdjuntos\\:confirmCancelarCircuAdjuntos').eq(1).remove();
</script>
</pe:masterDetailLevel>
</pe:masterDetail>
</h:form>
<componentes:confirmCancelar backBean="#{circularizaciones}"
id="confirmCerrarCircuAdjuntos"
dlgAlta="dlgCircuAdjuntos"
widgetVar="confirmCerrarCircuAdjuntos"
idBtnConfirm="btnConfirmCerrarCircuAdjuntos"
idBtnDecline="btnDeclineCerrarCircuAdjuntos">
</componentes:confirmCancelar>
</p:dialog>