单击第二次组件后,页面空白

发布于 2025-01-20 13:35:07 字数 5797 浏览 0 评论 0原文

(抱歉,如果英语不好)
我有一个显示数据表的页面,并且可以删除记录,但我有一个条件,如果它的 ID 类型是唯一的,则无法删除。因此,当发生这种情况时,我想在 组件中显示一条消息,这种情况发生正常,但如果我再次单击删除按钮,页面将变为空白,并且它可以'没有刷新什么的,我必须重新登录。

xhtml:

<p:dataTable id="respProdDT" widgetVar="respProdDT" var="resProd" value="#{caleFactBean.lstResponsablesProductos}"
    reflow="true" styleClass="products-table" scrollable="true" scrollWidth="99%"
    paginator="true" rows="10" paginatorPosition="bottom" >
        <f:facet name="header">
            <div align="center">
                <h:outputText value="Responsables por Producto" style="font-size: large"/>
            </div>
        </f:facet>
        <p:column headerText="Producto">
            <h:outputText value="#{resProd.grupoProducto}" />
        </p:column>
        <p:column headerText="Rol Autorizador">
            <h:outputText value="#{resProd.rolResponsable}" />
        </p:column>
        <p:column headerText="Tipo Autorizacion">
            <h:outputText value="Nivel #{resProd.idNivel}" />
        </p:column>
        <p:column headerText="Estado Autorizacion">
            <h:outputText value="#{resProd.estadoSolicitud}" rendered="#{resProd.isText()}"/>
            <p:selectOneMenu value="#{resProd.idEstadoSolicitud}" rendered="#{resProd.isComboBox()}">
                    <f:selectItem var="car"    itemLabel="Select one" itemValue="" />
                    <f:selectItems value="#{caleFactBean.combo}"/>   
            </p:selectOneMenu>
        </p:column>
        <p:column headerText="Fecha Inicio">
            <h:outputText value="#{resProd.fechaInicio}" >
                <f:convertDateTime pattern="dd/MM/yyyy" />
            </h:outputText>
        </p:column>
        <p:column headerText="Fecha Fin">
            <h:outputText value="#{resProd.fechaFin}" >
                <f:convertDateTime pattern="dd/MM/yyyy" />
            </h:outputText>
        </p:column>
        <p:column headerText="Accion">
        <p:commandLink id="btnEditarRespProd"
            rendered="#{resProd.isEditable()}"
            styleClass="ui-icon-document"
            oncomplete="PF('dlgEditarRespProd').show();"
            update="acordionPanels:frmEditarRespProd"
            action="#{caleFactBean.mapearRespProd()}">
            <p:tooltip for="btnEditarRespProd" value="Editar" />
            <f:setPropertyActionListener value="#{resProd}"
                target="#{caleFactBean.respProdAEditar}" />
            <p:graphicImage style="width:30px;"
                value="/resources/static/images/edit-icon.png" />
        </p:commandLink>

        <p:commandLink id="btnBorrarRespProd" styleClass="ui-icon-document"
            rendered="#{resProd.isRemovable()}"
            oncomplete="PF('dlgEliminarRespProd').show();" update="@form">
            <p:tooltip for="btnBorrarRespProd" value="Eliminar" />
            <f:setPropertyActionListener value="#{resProd}"
                target="#{caleFactBean.respProdAEliminar}" />
            <p:graphicImage style="width:30px;"
                value="/resources/static/images/borrar-icon.png" />
        </p:commandLink>
    </p:column>
</p:dataTable>
<h:form id="frmEliminarRespProd">
    <p:dialog header="¿Eliminar responsable producto?" id="dlgEliminarRespProd" widgetVar="dlgEliminarRespProd" modal="true" resizable="false" closable="false">
        <center>
            <h:outputLabel value="¿Eliminar registro?" />
            <br/><br/>
            <p:commandButton value="Cancelar" onclick="PF('frmEliminarRespProd').hide();" />
            <p:commandButton value="Aceptar" action="#{caleFactBean.eliminarRespProd}" onclick="PF('frmEliminarRespProd').hide();" style="margin-left: 10px;"/>
        </center>
    </p:dialog>
</h:form>

删除方法:

public void eliminarRespProd() throws Exception {
        logger.info("respProdAEliminar: " + respProdAEliminar);
        //boolean hasMoreThanOne = false;
        int countRespProdNivel = 0;
        
        try {
            for (ResponsableProdVo respProd : lstResponsablesProductos ) {
                if(respProdAEliminar.getIdGrupoProducto() == respProd.getIdGrupoProducto())
                    countRespProdNivel++;
                if(countRespProdNivel > 1) {
                    break;
                }
            }
            if(countRespProdNivel > 1) {
                responsablesProductoService.eliminarRespProd(respProdAEliminar);
                FacesContext.getCurrentInstance().getExternalContext().redirect("factnueva-flow");
            } else {
                //TODO: mensaje "El registro no se puede eliminar al ser el único responsable del producto"
//              FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR al eliminar","El registro no se puede eliminar al ser el único responsable del producto");
//              FacesContext.getCurrentInstance().addMessage("respProdMssg", message);
//              this.mensaje = "El registro no se puede eliminar al ser el único responsable del producto";
//              RequestContext.getCurrentInstance().execute("PF('dlgMensajes').show();");
                
            }
                
        } catch (Exception e) {
            logger.error("Ocurrio un error al eliminar el registro de Responsables Producto. " + e.getLocalizedMessage());
            throw e;
        }
    }

任何想法为什么会发生这种情况?

(Sorry If bad english)
I got a page that displays a datatable and the records can be deleted, but I have a condition that if its ID kind it's the only one left it can't be delete. So when this happens I want to display a message in a <p:growl /> component, this happens okay, but if I click the delete button again, the page goes blank and it can't be refreshed or anything, I have to login again.

xhtml:

<p:dataTable id="respProdDT" widgetVar="respProdDT" var="resProd" value="#{caleFactBean.lstResponsablesProductos}"
    reflow="true" styleClass="products-table" scrollable="true" scrollWidth="99%"
    paginator="true" rows="10" paginatorPosition="bottom" >
        <f:facet name="header">
            <div align="center">
                <h:outputText value="Responsables por Producto" style="font-size: large"/>
            </div>
        </f:facet>
        <p:column headerText="Producto">
            <h:outputText value="#{resProd.grupoProducto}" />
        </p:column>
        <p:column headerText="Rol Autorizador">
            <h:outputText value="#{resProd.rolResponsable}" />
        </p:column>
        <p:column headerText="Tipo Autorizacion">
            <h:outputText value="Nivel #{resProd.idNivel}" />
        </p:column>
        <p:column headerText="Estado Autorizacion">
            <h:outputText value="#{resProd.estadoSolicitud}" rendered="#{resProd.isText()}"/>
            <p:selectOneMenu value="#{resProd.idEstadoSolicitud}" rendered="#{resProd.isComboBox()}">
                    <f:selectItem var="car"    itemLabel="Select one" itemValue="" />
                    <f:selectItems value="#{caleFactBean.combo}"/>   
            </p:selectOneMenu>
        </p:column>
        <p:column headerText="Fecha Inicio">
            <h:outputText value="#{resProd.fechaInicio}" >
                <f:convertDateTime pattern="dd/MM/yyyy" />
            </h:outputText>
        </p:column>
        <p:column headerText="Fecha Fin">
            <h:outputText value="#{resProd.fechaFin}" >
                <f:convertDateTime pattern="dd/MM/yyyy" />
            </h:outputText>
        </p:column>
        <p:column headerText="Accion">
        <p:commandLink id="btnEditarRespProd"
            rendered="#{resProd.isEditable()}"
            styleClass="ui-icon-document"
            oncomplete="PF('dlgEditarRespProd').show();"
            update="acordionPanels:frmEditarRespProd"
            action="#{caleFactBean.mapearRespProd()}">
            <p:tooltip for="btnEditarRespProd" value="Editar" />
            <f:setPropertyActionListener value="#{resProd}"
                target="#{caleFactBean.respProdAEditar}" />
            <p:graphicImage style="width:30px;"
                value="/resources/static/images/edit-icon.png" />
        </p:commandLink>

        <p:commandLink id="btnBorrarRespProd" styleClass="ui-icon-document"
            rendered="#{resProd.isRemovable()}"
            oncomplete="PF('dlgEliminarRespProd').show();" update="@form">
            <p:tooltip for="btnBorrarRespProd" value="Eliminar" />
            <f:setPropertyActionListener value="#{resProd}"
                target="#{caleFactBean.respProdAEliminar}" />
            <p:graphicImage style="width:30px;"
                value="/resources/static/images/borrar-icon.png" />
        </p:commandLink>
    </p:column>
</p:dataTable>
<h:form id="frmEliminarRespProd">
    <p:dialog header="¿Eliminar responsable producto?" id="dlgEliminarRespProd" widgetVar="dlgEliminarRespProd" modal="true" resizable="false" closable="false">
        <center>
            <h:outputLabel value="¿Eliminar registro?" />
            <br/><br/>
            <p:commandButton value="Cancelar" onclick="PF('frmEliminarRespProd').hide();" />
            <p:commandButton value="Aceptar" action="#{caleFactBean.eliminarRespProd}" onclick="PF('frmEliminarRespProd').hide();" style="margin-left: 10px;"/>
        </center>
    </p:dialog>
</h:form>

Method to delete:

public void eliminarRespProd() throws Exception {
        logger.info("respProdAEliminar: " + respProdAEliminar);
        //boolean hasMoreThanOne = false;
        int countRespProdNivel = 0;
        
        try {
            for (ResponsableProdVo respProd : lstResponsablesProductos ) {
                if(respProdAEliminar.getIdGrupoProducto() == respProd.getIdGrupoProducto())
                    countRespProdNivel++;
                if(countRespProdNivel > 1) {
                    break;
                }
            }
            if(countRespProdNivel > 1) {
                responsablesProductoService.eliminarRespProd(respProdAEliminar);
                FacesContext.getCurrentInstance().getExternalContext().redirect("factnueva-flow");
            } else {
                //TODO: mensaje "El registro no se puede eliminar al ser el único responsable del producto"
//              FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR al eliminar","El registro no se puede eliminar al ser el único responsable del producto");
//              FacesContext.getCurrentInstance().addMessage("respProdMssg", message);
//              this.mensaje = "El registro no se puede eliminar al ser el único responsable del producto";
//              RequestContext.getCurrentInstance().execute("PF('dlgMensajes').show();");
                
            }
                
        } catch (Exception e) {
            logger.error("Ocurrio un error al eliminar el registro de Responsables Producto. " + e.getLocalizedMessage());
            throw e;
        }
    }

Any ideas why this could happen?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文