p:commandButton p:确认actionListener未触发

时间:2014-11-24 10:45:26

标签: jsf-2 primefaces dialog actionlistener confirm

Primefaces actionListener在p:confirmDialog中不起作用。有人可以帮忙吗? saveRecord在一个简单的对话框中工作正常。

<p:commandButton value="Save" actionListener="#{EmployeeDetailsComponent.displayInfo}">
    <p:confirm header="Attention" message="test" icon="ui-icon-alert" />
</p:commandButton>

<p:confirmDialog global="true" showEffect="fade" hideEffect="explode" appendToBody="true">
    <p:commandButton value="Save"  action="#{TestComponent.saveRecord(TestComponent.testData)}" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" />
    <p:commandButton value="Cancel" type="button" styleClass="ui-confirmdialog-no" icon="ui-icon-close" />
</p:confirmDialog>

3 个答案:

答案 0 :(得分:2)

您有appendToBody="true",这意味着没有<h:form>来处理点击,因为整个对话框内容直接在body下移动。只需在对话框中添加表单即可。

<p:confirmDialog global="true" showEffect="fade" hideEffect="explode" appendToBody="true">    
    <h:form>
        <p:commandButton value="Save"  action="#{TestComponent.saveRecord(TestComponent.testData)}" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" />
        <p:commandButton value="Cancel" type="button" styleClass="ui-confirmdialog-no" icon="ui-icon-close" />      
    </h:form>    
</p:confirmDialog>

答案 1 :(得分:1)

从确认对话框组件中删除appendToBody =“true”,并在表单中包含Save command buttton。

<!DOCTYPE html>
<f:view xmlns="http://www.w3.org/1999/xhtml"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:p="http://primefaces.org/ui">
    <html lang="en">
        <h:head>
        </h:head>
        <h:body id="top">
            <h:form>
                <p:commandButton value="Save" actionListener="#{simpleBean.displayInfo}" action="#{simpleBean.saveRecord}">
                    <p:confirm header="Attention" message="test" icon="ui-icon-alert" />
                </p:commandButton>
            </h:form>

            <p:confirmDialog closeOnEscape="true" global="true" showEffect="fade" hideEffect="explode">  
                <p:commandButton value="Save" type="button" styleClass="ui-confirmdialog-yes"/>
                <p:commandButton value="Cancel" type="button" styleClass="ui-confirmdialog-no"/>
            </p:confirmDialog>

        </h:body>
    </html>

</f:view>

SimpleBean.java

@Named("simpleBean")
public class SimpleBean implements Serializable{
   public void displayInfo(){
      Logger.getLogger(this.getClass().getName()).log(Level.INFO, "Display Info works");        
   }
   public String saveRecord(){
      Logger.getLogger(this.getClass().getName()).log(Level.INFO, "Save Record works");        
      return null;
   }
}

答案 2 :(得分:1)

我只需添加一个div来居中按钮和过程,动作效果很好,示例代码带有primefaces 5.1:

 <p:confirmDialog global="true" showEffect="clip"  >
      <div align="center">
         <p:commandButton value="Aceptar" actionListener="#{bienvenidoUI.asignarPSI()}"  update="tablaProceso" icon="ui-icon-check"   process="@this" styleClass="ui-confirmdialog-yes"/>
         <p:commandButton value="No" type="button" styleClass="ui-confirmdialog-no" icon="ui-icon-close" />
      </div>
 </p:confirmDialog>

我只需从表中调用confirmDialog:

<p:commandButton   icon="ui-icon-circle-check" title="Asignar PSI"  rendered="#{bienvenidoUI.usr.idUsuario==bienvenidoUI.autorizadorId and min.estado.descripcion=='Proceso'}">
       <f:setPropertyActionListener value="#{min}" target="#{bienvenidoUI.minutaSelected}"  />
       <p:confirm header="Confirmación" message="Esta seguro que desea asignar psi?" icon="ui-icon-alert" />
</p:commandButton>