Как динамически отключить / включить командную кнопку в datatable в JSF / PrimeFaces - PullRequest
0 голосов
/ 26 декабря 2018

Я отображаю список некоторых объектов в простых данных.Помимо столбцов, связанных с объектами, я добавил два столбца, которые содержат командную кнопку.Каждая из этих командных кнопок делает ajax-вызовы нужных методов в bean-компоненте.Я хочу отключить обе командные кнопки в этой строке при нажатии любой из кнопок и включить их снова после успешного завершения действия.Выполнение метода моделируется ajaxStatus, который работает нормально.

Ниже приведен выбранный код методов бина xhtml

<h:form id="form1" >
<p:remoteCommand name="onload" action="#{controlBean.init}" autoRun="true" />  
   <h:outputtext>Sample Project</h:outputtext>
  <p:ajaxStatus style="display:block;margin-bottom:2em;height:24px;">
    <f:facet name="prestart">
    <h:outputText value="Starting..." /> </f:facet>
    <f:facet name="error"> <h:outputText value="Error" />
    </f:facet>
    <f:facet name="success"> <h:outputText value="Success" />
    </f:facet>
    <f:facet name="default"> <h:outputText value="Idle" />
    </f:facet>
    <f:facet name="start"> <h:outputText value="Please Wait" />
        <p:graphicImage name="/images/ajaxloadingbar.gif" />
    </f:facet>
</p:ajaxStatus>
      <p:dataTable var="appl" id="tbl1" rowIndexVar="rowIndx"  value="#{controlBean.applsList}">

<p:column headerText="Name">
    <h:outputText value="#{appl.applName}" />
</p:column>

<p:column headerText="Type">
    <h:outputText value="#{appl.applType}" />
</p:column>

<p:column headerText="Desc" rendered="true">
    <h:outputText value="#{appl.applDesc}" />
</p:column>

<p:column headerText="Start Appl" id="col4">
    <p:commandButton value="Submit" ajax="true"
    process="@this"
    widgetVar="startButtonVar"
    id="startBtn" update="msgs, col4, startBtn" 
    action="#{controlBean.startAction}" style="margin-right:20px;" 
    styleClass="ui-priority-primary"
    disabled="#{controlBean.startBtnDisabled}"> 

        <f:setPropertyActionListener value="#{appl}" target="#{controlBean.selectedAppl}"/>
    </p:commandButton> 
</p:column>
<p:column headerText="Stop Appl" id="col5">
    <p:commandButton value="Submit" ajax="true" 
    process="@this"
    widgetVar="stopButtonVar"
    id="stopBtn" update="msgs, col5" 
    action="#{controlBean.stopAction}" style="margin-right:20px;" 
    styleClass="ui-priority-primary" 
    disabled="#{controlBean.btnDisabled}">
        <f:setPropertyActionListener value="#{appl}" target="#{controlBean.selectedAppl}"/>

    </p:commandButton>

</p:column>

 </p:dataTable>
</h:form>

, как показано ниже:

  public void startAction() 
{
    System.out.println("In start action method");
    this.btnDisabled = true;

    for(int i=0;i<100000;i++)
    {
        if(i%10000 == 0) 
        {
            System.out.println(i);
        }
        for(int j=0;j<10000;j++)
        {
            for(int k=0;k<1000;k++)
            {

            }
        }
    }
    MessageUtils.info(getSelectedAppl().getApplName()+" has been started");
    this.btnDisabled = false;

}

public void stopAction() 
{
    System.out.println("In stop action method");
    this.btnDisabled = true;
    for(int i=0;i<100000;i++)
    {
        if(i%10000 == 0) 
        {
            System.out.println(i);
        }
        for(int j=0;j<10000;j++)
        {
            for(int k=0;k<1000;k++)
            {

            }
        }
    }
    MessageUtils.info(getSelectedAppl().getApplName()+" has been stopped");
   this.btnDisabled = false;

}

Всеработает нормально, кроме отключения / включения командных кнопок.Любая помощь в этом отношении будет высоко оценена.Привет

1 Ответ

0 голосов
/ 27 декабря 2018

Вы можете отключить их в обработчике JavaScript onclick:

<p:commandButton id="startBtn"
                 widgetVar="startButtonVar"
                 onclick="PF('startButtonVar').disable();"
                 .....

onclick будет выполняться ДО вызова AJAX.По возвращении, когда кнопка будет обновлена, она будет снова включена.

...