【问题标题】:Primefaces confirmDialog doesn't show up after one callPrimefaces confirmDialog 一次通话后不显示
【发布时间】:2015-08-06 09:38:24
【问题描述】:

我遇到了 PrimeFaces <p:confirmDialog> 的问题,当我单击必须显示对话框的 <p:commandLink> 并选择“否”时,一切都很好。但是当我点击是时,一切都只是第一次。 当该过程结束并且我再次单击任何<p:commandLink> 时,除非我刷新整个页面,否则不会显示对话框。我已经尝试了所有方法,但我无法弄清楚可能是什么问题。

<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>

【问题讨论】:

  • p:datatable 是否相关?意思是,如果您删除它并拥有一个字段,它会起作用吗?您是否与 PF 展示/文档示例进行了比较?你有没有让其中一个正常工作?那么确认对话框上的 ajax="true" 呢?不存在这样的属性。或者您是否尝试过使用“update="@form"?例如删除它,或将其放在 commandLink 上。 (对不起,我没有时间尝试,所以我只是给出提示)。这听起来像是我以前读过的东西,但无法立即确定。
  • 我使用 p:datatable 因为我想对用户列表进行分页。我尝试在展示/文档上使用 confirmDialog 但它不起作用。所以我尝试了这个,一切都是很好。你对 ajax 属性是正确的,我在测试更新 @form 时把它放了,但我忘了删除它。
  • 我并不是说它在现实世界的案例中不相关,但它与在这个问题中发挥作用有关吗?
  • 我认为是的,因为如果您已经注意到,数据表的每一列都有自己的 confirmDialog,其 id 基于我的模型 user.id 的字段。
  • 认为或确定?试过了吗?如果它在没有数据表的情况下工作,并且至少不能以这种方式工作,那么这是重要的信息。

标签: jsf-2 primefaces


【解决方案1】:

我终于解决了我的问题。我将&lt;p:confirmDialog&gt; 更改为全局变量,它可以工作。

<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>

【讨论】:

    【解决方案2】:

    我尝试了您的代码并对其进行了一些修复。希望它也对你有用。 -我删除了ajax="true" -usersBean.deleteUser函数需要知道哪个用户所以->删除usersBean.deleteUser(user)

    下面是我用来测试您的案例的代码。由于我现有的豆子,一些事情发生了变化。此代码在最新的 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: 公共类 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);
    }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-06-18
      • 2015-10-05
      • 2014-08-10
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      相关资源
      最近更新 更多