在primefaces上使用onedit时如何避免多个请求?

时间:2014-09-11 22:02:45

标签: jquery jsf jsf-2 primefaces datatable

我正在使用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> 

提前致谢!

2 个答案:

答案 0 :(得分: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还可以显示一些加载信息或其他内容。

答案 1 :(得分:0)

好吧,我以某种方式设法通过在onEdit的乞讨中禁用并在我的onEdit结束时启用来解决我的问题。

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