Primefaces commandLink需要时间

Primefaces commandLink需要时间,primefaces,commandlink,Primefaces,Commandlink,我有下面的数据表 <p:dataTable id="viewTicketsDataTable" styleClass="inventoryDataTable viewTicketsTable" value="#{viewTicketsBean.invbean.inventoryModel.getUiTicketList()}" var="viewTickets" frame="hsides" widgetVar="viewTicketsDataT

我有下面的数据表

<p:dataTable id="viewTicketsDataTable"
    styleClass="inventoryDataTable viewTicketsTable"
    value="#{viewTicketsBean.invbean.inventoryModel.getUiTicketList()}"
    var="viewTickets" 
    frame="hsides" 
    widgetVar="viewTicketsDataTable"
    lazy="true" 
    resizableColumns="true" 
    scrollable="true"
    scrollHeight="540" 
    scrollRows="30" 
    sortOrder="ASCENDING" 
    sortBy="#{viewTickets.id}"
    rowKey="#{viewTickets.id}"
    emptyMessage="#{viewTicketsBean.invbean.inventoryModel.emptyStatusMessage}"
    rowIndexVar="rowIndex" >
        <p:ajax id="sortEventId" event="sort" listener="#{sortBean.sort}"
            update="#{updateSorting}"
            onstart="#{onStartSorting}"
            oncomplete="#{onCompleteSorting}"/>  

        <p:columns  id ="dtColId" 
            value="#{customizeColBean.invbean.inventoryModel.dataTableColumns}" 
            var="column" columnIndexVar="colIndex" sortBy="#{column.sortKey}" >                 
                <f:facet name="header">#{column.header}</f:facet>
                    **<p:commandLink styleClass="ticketCls toolTipCls servIdLink" 
                        value="#{viewTickets.id}" rendered="#{column.property eq 'id'}" onstart="openDetailsPopup()"
                        oncomplete="callContacts();" >
                        <f:setPropertyActionListener target="#{repairTicketDetailsBean.selectedticketHistory}" value="#{viewTickets}" />
                    </p:commandLink>**

                    <h:outputText value="#{viewTickets[column.property]}"
                        rendered="#{column.property eq 'serviceType' or column.property eq 'serviceId'  
                            or column.property eq 'originId' 
                            or column.property eq 'customName' 
                            or column.property eq 'trackingNumber' 
                            or column.property eq 'deviceName' 
                            or column.property eq 'location'
                            or column.property eq 'ticketCreatedDateCorrected'}" />
                    <h:outputText styleClass="detailedStatusCls" value="#{viewTickets[column.property]}"
                              rendered="#{column.property eq 'detailedStatus'}" />
                    <h:outputText styleClass="ticketLastModifiedCorrectedCls" value="#{viewTickets[column.property]}"
                              rendered="#{column.property eq 'ticketLastModifiedCorrected'}" />

        </p:columns>

        <p:column styleClass="ctl_hide">
            <h:outputText styleClass="lastLogEntryTextCls" value="#{viewTickets.lastLogEntryText}" />
        </p:column>
        <p:column styleClass="ctl_hide" >
            <h:outputText styleClass="descriptionCls" value="#{viewTickets.desc}" />
        </p:column>
</p:dataTable>
我将partialSubmit=true和process=@设置为this,之后它将显著减少首次单击任何链接的时间。任何后续链接仍需要一些时间。您能在这里帮助了解情况吗

注意:第一种情况下的时间大于15秒,第二种情况下,第一次为5秒,后续点击链接时为10到15秒

下面是我的callContacts方法

function callContacts(){
        alert('first')
        var jQcontactsLoadedCls = jQ(".contactsLoadedCls").val();
        console.log('jQcontactsLoadedCls called!! ' + jQcontactsLoadedCls)
        //if condition is added for create ticket where already contacts are loaded
        if(jQcontactsLoadedCls=='false'){

            jQ('.titleTktIdCls').text("");
            jQ('.titleServiceIdCls').text("");
            jQ('.lblServiceTypeCls').text("");
            jQ('.lblStatusCls').text("");
            jQ('.lblServiceTypeCls').text("");
            jQ('.lblCreatedCls').text("");
            jQ('.lblCreatedCls').text("");
            var jQticketDetailsCL = jQ('.ticketDetailsCL'); 
            jQ(jQticketDetailsCL).click();              
        }else{
            PF('circuitTestdetailsModalDialogWVar').show();
            loadTicketDetailsWindow("undefined")

            PF("repairTab").select(0);
        }

 <p:panel id="ticketDetailsMainPanel" styleClass="ticketDetailsMainPanel">
    <p:tabView  widgetVar="repairTab" class="CktTestPopupTab">          
        <p:tab title="Ticket Details" rendered="#{repairTicketDetailsBean.ticketDetailsForSid.configFlag == false}">            
            <ui:include src="ticketDetailsTab.xhtml" ></ui:include>                 
        </p:tab>

        <p:tab title="Change Details" rendered="#{repairTicketDetailsBean.ticketDetailsForSid.configFlag == true}">         
            <ui:include src="configDetailsTab.xhtml" ></ui:include>          
        </p:tab>

        <p:tab title="Work Log" >
            <ui:include src="workLogTab.xhtml" ></ui:include>
        </p:tab>

        <p:tab title="On Site Contact" rendered="#{repairTicketDetailsBean.ticketDetailsForSid.configFlag == false}">
             <ui:include src="onSiteContactTab.xhtml" ></ui:include>
        </p:tab>

        <p:tab title="Ticket Contacts" >
            <ui:include src="ticketContactsTab.xhtml" >
                <ui:param name="dafaultPrimaryContact" value="#{repairTicketDetailsBean.defaultPrimaryContactName}" />
                <ui:param name="dafaultSecondaryContact" value="#{repairTicketDetailsBean.defaultSecondaryContactName}" />
                <ui:param name="contactFlow" value="ticketDetails" />
            </ui:include>
        </p:tab>

        <p:tab title="Attachments" >
           <ui:include src="attachmentsTab.xhtml" >
                <ui:param name="attachmentsFlow" value="ticketDetails" />   
           </ui:include>
        </p:tab>

        <p:tab title="CALNET 3" rendered="#{viewTicketsBean.enterpriseUserType != null and viewTicketsBean.enterpriseUserType eq 'CALNET' and repairTicketDetailsBean.ticketDetailsForSid.configFlag == false}">
           <ui:include src="CalnetInfo.xhtml" ></ui:include>
        </p:tab>

         <p:tab title="Call Details" rendered="#{repairTicketDetailsBean.ticketDetailsForSid.serviceType eq '8XX' or repairTicketDetailsBean.ticketDetailsForSid.serviceType eq 'LD' or repairTicketDetailsBean.ticketDetailsForSid.serviceType eq 'VOIP DID' or repairTicketDetailsBean.ticketDetailsForSid.serviceType eq 'VOIP TN'}">
            <ui:include src="callDetails.xhtml" ></ui:include>  
        </p:tab>    

    </p:tabView>
    <p:blockUI id="sidDetailsBlockUiId" block="circuitTestdetailsModalDialogId">
                <div class="getMore loading-text">
                    <div class="loading-circle"></div>
                    Loading...
                </div>
    </p:blockUI>


    <p:commandLink id="ticketDetailsCL" styleClass="ticketDetailsCL" actionListener="#{repairTicketDetailsBean.getTicketDetails()}" onstart="#{displayInvLoadingScreen}" oncomplete="#{hideInvLoadingScreen}" update="ticketDetailsMainPanel,reqTktClosureBtn" partialSubmit="true" async="true" process="@this"/>


    <p:commandLink id="ticketContactDetails" styleClass="ticketContactDetailsCls" actionListener="#{contactInfoBean.getEnterpriseContactInformation('ticketDetails')}"  update="ticketDetailsMainPanel" partialSubmit="true" async="true" process="@this"/>
    <p:commandLink id="updateContactWorkLog" styleClass="updateContactWorkLogCls" actionListener="#{repairTicketDetailsBean.updateContactInfo()}" onstart="#{displayInvLoadingScreen}" oncomplete="#{hideInvLoadingScreen}loadTicketDetailsWindow(args);" update="ticketDetailsMainPanel" />


    <p:inputText id="statusText" styleClass="statusText ctl_hide" value="#{repairTicketDetailsBean.ticketDetailsForSid.detailedStatus}"></p:inputText>
    <p:inputText id="tktIdText" styleClass="tktIdText ctl_hide" value="#{repairTicketDetailsBean.ticketDetailsForSid.id}"></p:inputText>
    <p:inputText id="serviceType" styleClass="serviceType ctl_hide" value="#{repairTicketDetailsBean.ticketDetailsForSid.serviceType}"></p:inputText>
    <p:inputText id="createdText" styleClass="createdText ctl_hide" value="#{repairTicketDetailsBean.ticketDetailsForSid.ticketCreatedDateCorrected}"></p:inputText>
    <p:inputText id="updatedText" styleClass="updatedText ctl_hide" value="#{repairTicketDetailsBean.ticketDetailsForSid.ticketLastModifiedCorrected}"></p:inputText>
    <p:inputText id="serviceIdText" styleClass="serviceIdText ctl_hide" value="#{repairTicketDetailsBean.ticketDetailsForSid.serviceId}"></p:inputText>
    <p:inputText id="serviceLocText" styleClass="serviceLocText ctl_hide" value="#{repairTicketDetailsBean.ticketDetailsForSid.location}"></p:inputText>


</p:panel>
函数callContacts(){
警报(“第一个”)
var jQcontactsLoadedCls=jQ(“.contactsLoadedCls”).val();
log('jQcontactsLoadedCls调用!!'+jQcontactsLoadedCls)
//如果为已加载联系人的创建票证添加了条件
如果(jQcontactsLoadedCls=='false'){
jQ('.titleTktIdCls')。文本(“”);
jQ('.titleServiceIdCls')。文本(“”);
jQ('.lblServiceTypeCls')。文本(“”);
jQ('.lblStatusCls')。文本(“”);
jQ('.lblServiceTypeCls')。文本(“”);
jQ('.lblCreatedCls')。文本(“”);
jQ('.lblCreatedCls')。文本(“”);
var jQticketDetailsCL=jQ('.ticketDetailsCL');
jQ(jQticketDetailsCL).单击();
}否则{
PF('circuitTestdetailsModalDialogWVar').show();
loadTicketDetailsWindow(“未定义”)
PF(“维修选项卡”)。选择(0);
}
加载。。。
因此,基本上在点击datatable链接时,我必须打开一个对话框弹出窗口并进行调用,以获取弹出窗口中显示的详细信息。我在
callContacts()
方法中放置了一个警报。点击链接后,警报第一次快速出现,但在第一次之后,警报本身需要时间

如果我从
中删除更新,则callContacts中的警报称为“相当快”


我希望现在很清楚,

oncomplete在commandLink操作完成时触发(因此是“完成”),因此在oncomplete中执行javascript的所有延迟都是原因,这就是您的代码。因此,请将此发布到……第二个问题,您正试图实现什么(从非技术角度来看)并且您不在commandLink的服务器端执行任何操作(除了设置属性)我认为你必须开始分析你的应用程序客户端和服务器端。使用system.out和console.log打印日期很可能已经有很大帮助。你的代码包含了太多的噪音才能真正看到发生了什么。你可能会陷入我最初的问题,即你试图实现的功能性、非技术性的目标仍然存在
function callContacts(){
        alert('first')
        var jQcontactsLoadedCls = jQ(".contactsLoadedCls").val();
        console.log('jQcontactsLoadedCls called!! ' + jQcontactsLoadedCls)
        //if condition is added for create ticket where already contacts are loaded
        if(jQcontactsLoadedCls=='false'){

            jQ('.titleTktIdCls').text("");
            jQ('.titleServiceIdCls').text("");
            jQ('.lblServiceTypeCls').text("");
            jQ('.lblStatusCls').text("");
            jQ('.lblServiceTypeCls').text("");
            jQ('.lblCreatedCls').text("");
            jQ('.lblCreatedCls').text("");
            var jQticketDetailsCL = jQ('.ticketDetailsCL'); 
            jQ(jQticketDetailsCL).click();              
        }else{
            PF('circuitTestdetailsModalDialogWVar').show();
            loadTicketDetailsWindow("undefined")

            PF("repairTab").select(0);
        }

 <p:panel id="ticketDetailsMainPanel" styleClass="ticketDetailsMainPanel">
    <p:tabView  widgetVar="repairTab" class="CktTestPopupTab">          
        <p:tab title="Ticket Details" rendered="#{repairTicketDetailsBean.ticketDetailsForSid.configFlag == false}">            
            <ui:include src="ticketDetailsTab.xhtml" ></ui:include>                 
        </p:tab>

        <p:tab title="Change Details" rendered="#{repairTicketDetailsBean.ticketDetailsForSid.configFlag == true}">         
            <ui:include src="configDetailsTab.xhtml" ></ui:include>          
        </p:tab>

        <p:tab title="Work Log" >
            <ui:include src="workLogTab.xhtml" ></ui:include>
        </p:tab>

        <p:tab title="On Site Contact" rendered="#{repairTicketDetailsBean.ticketDetailsForSid.configFlag == false}">
             <ui:include src="onSiteContactTab.xhtml" ></ui:include>
        </p:tab>

        <p:tab title="Ticket Contacts" >
            <ui:include src="ticketContactsTab.xhtml" >
                <ui:param name="dafaultPrimaryContact" value="#{repairTicketDetailsBean.defaultPrimaryContactName}" />
                <ui:param name="dafaultSecondaryContact" value="#{repairTicketDetailsBean.defaultSecondaryContactName}" />
                <ui:param name="contactFlow" value="ticketDetails" />
            </ui:include>
        </p:tab>

        <p:tab title="Attachments" >
           <ui:include src="attachmentsTab.xhtml" >
                <ui:param name="attachmentsFlow" value="ticketDetails" />   
           </ui:include>
        </p:tab>

        <p:tab title="CALNET 3" rendered="#{viewTicketsBean.enterpriseUserType != null and viewTicketsBean.enterpriseUserType eq 'CALNET' and repairTicketDetailsBean.ticketDetailsForSid.configFlag == false}">
           <ui:include src="CalnetInfo.xhtml" ></ui:include>
        </p:tab>

         <p:tab title="Call Details" rendered="#{repairTicketDetailsBean.ticketDetailsForSid.serviceType eq '8XX' or repairTicketDetailsBean.ticketDetailsForSid.serviceType eq 'LD' or repairTicketDetailsBean.ticketDetailsForSid.serviceType eq 'VOIP DID' or repairTicketDetailsBean.ticketDetailsForSid.serviceType eq 'VOIP TN'}">
            <ui:include src="callDetails.xhtml" ></ui:include>  
        </p:tab>    

    </p:tabView>
    <p:blockUI id="sidDetailsBlockUiId" block="circuitTestdetailsModalDialogId">
                <div class="getMore loading-text">
                    <div class="loading-circle"></div>
                    Loading...
                </div>
    </p:blockUI>


    <p:commandLink id="ticketDetailsCL" styleClass="ticketDetailsCL" actionListener="#{repairTicketDetailsBean.getTicketDetails()}" onstart="#{displayInvLoadingScreen}" oncomplete="#{hideInvLoadingScreen}" update="ticketDetailsMainPanel,reqTktClosureBtn" partialSubmit="true" async="true" process="@this"/>


    <p:commandLink id="ticketContactDetails" styleClass="ticketContactDetailsCls" actionListener="#{contactInfoBean.getEnterpriseContactInformation('ticketDetails')}"  update="ticketDetailsMainPanel" partialSubmit="true" async="true" process="@this"/>
    <p:commandLink id="updateContactWorkLog" styleClass="updateContactWorkLogCls" actionListener="#{repairTicketDetailsBean.updateContactInfo()}" onstart="#{displayInvLoadingScreen}" oncomplete="#{hideInvLoadingScreen}loadTicketDetailsWindow(args);" update="ticketDetailsMainPanel" />


    <p:inputText id="statusText" styleClass="statusText ctl_hide" value="#{repairTicketDetailsBean.ticketDetailsForSid.detailedStatus}"></p:inputText>
    <p:inputText id="tktIdText" styleClass="tktIdText ctl_hide" value="#{repairTicketDetailsBean.ticketDetailsForSid.id}"></p:inputText>
    <p:inputText id="serviceType" styleClass="serviceType ctl_hide" value="#{repairTicketDetailsBean.ticketDetailsForSid.serviceType}"></p:inputText>
    <p:inputText id="createdText" styleClass="createdText ctl_hide" value="#{repairTicketDetailsBean.ticketDetailsForSid.ticketCreatedDateCorrected}"></p:inputText>
    <p:inputText id="updatedText" styleClass="updatedText ctl_hide" value="#{repairTicketDetailsBean.ticketDetailsForSid.ticketLastModifiedCorrected}"></p:inputText>
    <p:inputText id="serviceIdText" styleClass="serviceIdText ctl_hide" value="#{repairTicketDetailsBean.ticketDetailsForSid.serviceId}"></p:inputText>
    <p:inputText id="serviceLocText" styleClass="serviceLocText ctl_hide" value="#{repairTicketDetailsBean.ticketDetailsForSid.location}"></p:inputText>


</p:panel>