Primefaces confirmDialog 在一次调用后不显示

Primefaces confirmDialog doesn't show up after one call

我在使用 PrimeFaces <p:confirmDialog> 时遇到问题,当我单击必须显示对话框的 <p:commandLink> 并选择 'No' 时,一切正常。但是当我点击是时,一切都只是第一次。 当该过程结束并且我再次单击任何 <p:commandLink> 时,对话框不会显示,除非我刷新整个 page.I 已经尝试了一切但我无法弄清楚可能是什么问题。

<h:form>
   <p:dataTable  border="0" rules="all" value="#{userBean.users}" var="user" autoUpdate="true" styleClass="table table-hover" paginator="true" paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="6,10,15" >
      <p:column>
         <f:facet name="header">
            <h:outputText value="Login" />
         </f:facet>
         <h:outputText value="#{user.login}" />
      </p:column>
      <p:column>
         <f:facet name="header">
            <h:outputText value="" />
         </f:facet>
         <p:commandLink class="badge bg-red marge-left"  onclick='PF("cdu#{user.id}").show()' title="Supprimer un utilisateur"><span class="fa fa-trash-o"/></p:commandLink>
         <p:confirmDialog ajax="true" message="Voulez vous vraiment supprimer l'utilisateur '#{user.login}'" closable="true"  header="Confirmation" severity="alert" widgetVar="cdu#{user.id}"  >
            <p:commandButton  value="oui" actionListener="#{userBean.deleteUser}"  update="@form" onclick='PF("cdu#{user.id}").hide()' styleClass="btn btn-primary"/>
            <p:commandButton  value="non" onclick='PF("cdu#{user.id}").hide()' type="button" styleClass="btn btn-danger" />
         </p:confirmDialog>
      </p:column>
   </p:dataTable>
</h:form>

我试过你的代码并稍作修改。希望它也对你有用。 -我删除了 ajax="true" -usersBean.deleteUser 函数需要知道要删除哪个用户 -> deleteusersBean.deleteUser(user)

下面是我用来测试您的案例的代码。由于我现有的 bean,一些事情发生了变化。此代码已在最新的 primefaces(5.2) 上进行测试。

我的 xhtml 文件:

         <p:column>
            <f:facet name="header">
                <h:outputText value="" />
            </f:facet>

            <p:commandLink class="badge bg-red marge-left" value="delete" onclick='PF("cdu#{user.userId}").show()' title="Supprimer un utilisateur"><span class="fa fa-trash-o"/></p:commandLink>

            <p:confirmDialog message="Voulez vous vraiment supprimer l'utilisateur '#{user.name}'" closable="true"  header="Confirmation" severity="alert" widgetVar="cdu#{user.userId}"  >        
                <p:commandButton  value="oui" actionListener="#{loginBean.deleteUser(user)}"  update="@form" onclick='PF("cdu#{user.userId}").hide()' styleClass="btn btn-primary"/>  
                <p:commandButton  value="non" onclick='PF("cdu#{user.userId}").hide()' type="button" styleClass="btn btn-danger" />   
            </p:confirmDialog> 
         </p:column>

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

我的登录Bean: public class LoginBean 实现 Serializable {

private static final long serialVersionUID = 6188046073588310656L;

private List<User> users= new ArrayList<User>();

public LoginBean() {

}

public List<User> getUsers() {
    if(users.size()==0){
        for (int i= 0; i<3; i++){
            User u = new User();
            u.setUserId(i);
            u.setName("noob"+i);
            users.add(u);
        }
    }
    return users;
}

public void deleteUser(User user){
    users.remove(user);
}
}

我终于解决了我的问题。我将 <p:confirmDialog> 更改为一个全局的并且有效。

<h:form>
   <p:dataTable  border="0" rules="all" value="#{userBean.users}" var="user" autoUpdate="true" styleClass="table table-hover">
      <p:column>
         <f:facet name="header">
            <h:outputText value="Login" />
         </f:facet>
         <h:outputText value="#{user.login}" />
      </p:column>
      <p:column>
         <f:facet name="header">
            <h:outputText value="Nom" />
         </f:facet>
         <h:outputText value="#{user.firstName} #{user.lastName}" />
      </p:column>
      <p:column style="width:200px;">
         <f:facet name="header">
            <h:outputText value="Email" />
         </f:facet>
         <h:outputText value="#{user.email}" />
      </p:column>
      <p:column >
         <f:facet name="header">
            <h:outputText value="" />
         </f:facet>
         <p:commandLink class="badge bg-blue marge-left" action="#{userBean.getUserRowToEdit}" title="Editer un utilisateur" ><span class="fa fa-edit"/></p:commandLink>
         <p:commandLink class="glyphicon glyphicon-trash icon-trash"  actionListener="#{userBean.deleteUser}"  title="Supprimer un utilisateur"  update="@form">
            <p:confirm header="Confirmation" message="Voulez-vous vraiment supprimer l'utilisateur?" icon="ui-icon-alert"/>
         </p:commandLink>
      </p:column>
   </p:dataTable>
   <p:confirmDialog global="true">
      <p:commandButton value="Yes" type="button" styleClass="ui-confirmdialog-yes" icon="ui-icon-check"/>
      <p:commandButton value="No" type="button" styleClass="ui-confirmdialog-no" icon="ui-icon-close"/>
   </p:confirmDialog>
</h:form>