【问题标题】:how to avoid multiple request when using onedit on primefaces?在primefaces上使用onedit时如何避免多个请求?
【发布时间】:2014-11-06 00:07:54
【问题描述】:

我正在使用 Primefaces 4.0,并且我在数据表中获得了一个“onEdit”函数来更新我的记录。 问题是,如果用户不耐烦并多次单击接受图标;它多次触发请求,因此它会多次更新。 那么有没有办法让“onEdit”在第一次点击接受图标后显示铅笔图标? 这是我的代码:

<p:dataTable var="d" value="#{originadorMB.listOriginadorDetalleDTO}" id="addList" editable="true" 
    paginator="true" rows="10" rowKey="#{d.idMensajeria}" rowIndexVar="rowIndex" 
    selection="#{originadorMB.selectedOriginadorDetalleDTO}" selectionMode="single" 
    filteredValue="#{originadorMB.filteredListMensajerias}"
    emptyMessage="No hay registros" paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"  
    rowsPerPageTemplate="10,20,40" >
    <f:facet name="header">
        Mensajer&iacute;as
    </f:facet>
    <p:ajax event="rowEdit" listener="#{originadorMB.onEdit}" update=":originadorForm:growl" />
    <p:ajax event="rowEditCancel" listener="#{originadorMB.onCancel}" update=":originadorForm:growl" />
    <p:ajax event="rowSelect" update=":originadorForm:growl" 
        listener="#{originadorMB.onRowDetalleSelect}"/>  
    <p:column id="idMensajeriaColumn" filterBy="idMensajeria" style="width:30%"
        headerText="Clave Mensajer&iacute;a" filterMatchMode="contains">
        <h:outputText value="#{d.idMensajeria}" />
    </p:column>                            
    <p:column headerText="Activo">
        <p:cellEditor>
            <f:facet name="output">
                <p:selectBooleanCheckbox disabled="TRUE" value="#{d.activar}"/> 
            </f:facet>
            <f:facet name="input">
                <p:selectBooleanCheckbox value="#{d.activar}"/> 
            </f:facet>
        </p:cellEditor>                                                      
    </p:column>                        
    <p:column style="width:6%">
        <p:rowEditor />
    </p:column>
</p:dataTable> 

提前致谢!

【问题讨论】:

    标签: jquery jsf jsf-2 primefaces datatable


    【解决方案1】:

    好吧,我设法解决了我的问题,方法是在我的 onEdit 请求时禁用并在我的 onEdit 结束时启用。

                                <p:ajax disabled="#{originadorMB.disableEdit}" event="rowEdit" listener="#{originadorMB.onEdit}" 
                                update=":originadorForm:growl" async="true" />
    

    【讨论】:

      【解决方案2】:

      您也可以使用 blockUI primefaces 组件。不要禁用 ajax 事件,而是阻止 UI 进行进一步的点击,直到第一次点击被完全处理:

      <p:ajax event="rowEdit" listener="#{originadorMB.onEdit}" 
            onstart="PF('blockUI').show();" oncomplete="PF('blockUI').hide();"/>
      
      <p:blockUI block="addList" widgetVar="blockUI">
         <h:outputText value="Some Loading Text"></h:outputText>
         <h:graphicImage value="path/To/Loading.gif" />
      </p:blockUI> 
      

      除了想要的效果之外,blockUI 还为您提供了显示一些加载信息或其他内容的可能性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-03
        • 1970-01-01
        • 2022-10-23
        • 2018-02-15
        • 1970-01-01
        • 2020-06-30
        • 1970-01-01
        • 2013-12-21
        相关资源
        最近更新 更多