【问题标题】:Primefaces confirm dialog disappearing almost instantlyPrimefaces 确认对话框几乎立即消失
【发布时间】:2012-02-24 13:02:56
【问题描述】:

我正在用 JSF 2.0 开发一个应用程序。我也在使用 Primefaces 组件库。 Primefaces 的 p:confirmDialog 有问题。一旦我想显示一个 p:confirmDialog,它几乎立即又消失了。最奇怪的是,这个问题只发生在工作中部署在 GlassFish Server 上的应用程序中。当我将相同的 .war 文件上传到家中计算机上的 GlassFish 服务器或在 Netbeans 中运行应用程序时,不会出现此问题。我真的无法找出这个问题的原因是什么。我也无法在 Google 上找到任何有关此的信息。任何帮助将不胜感激!这是我的代码:

<h:commandButton value="Verwijderen" onclick="bezoekConfirmation.show()" styleClass="verwijderKnopBig" rendered="#{pageRenderController.canWriteBezoekenMobiele}" />
<p:confirmDialog message="Bent u zeker dat u dit bezoek wilt verwijderen?" closable="false"
     header="Bezoek verwijderen" severity="alert" widgetVar="bezoekConfirmation">
     <p:commandButton value="Ja" oncomplete="bezoekConfirmation.hide()" action="#{bezoekenMobieleController.deleteBezoek}" ajax="false" />
     <p:commandButton value="Nee" onclick="bezoekConfirmation.hide()" type="button" />
</p:confirmDialog>

【问题讨论】:

  • 您是按Ctrl+F5 从工作服务器打开的页面还是至少清除整个域上的浏览器缓存以确保您拥有包含PrimeFaces 的CSS/JS 的最新版本东西?也许你同时升级了 PrimeFaces,你的浏览器缓存中仍然有来自域的旧 JS。
  • 在应用程序开发过程中,我确实将 PrimeFaces 库更新到另一个版本。你会推荐我做什么?服务器端有什么我应该做的吗?
  • 如前所述,清除浏览器缓存。
  • 我明天上班第一件事就试试。到目前为止,谢谢!
  • 不幸的是它没有用。不过我认为你是对的,它必须对其他 Primefaces 版本的更新做一些事情。我对另一个组件 p:Datatable 也有问题:滚动条在工作中的应用程序上不起作用。

标签: jsf jsf-2 primefaces


【解决方案1】:

单击按钮将导致提交。出现对话框,并立即重新加载页面。

改变这个:

bezoekConfirmation.show()

到这里:

bezoekConfirmation.show(); return false;

你的版本能在家里的电脑上运行真的很奇怪。

【讨论】:

    【解决方案2】:
    <h:commandButton value="Verwijderen" onclick="bezoekConfirmation.show()" styleClass="verwijderKnopBig" rendered="#{pageRenderController.canWriteBezoekenMobiele}" />
    <p:confirmDialog message="Bent u zeker dat u dit bezoek wilt verwijderen?" closable="false"
         header="Bezoek verwijderen" severity="alert" widgetVar="bezoekConfirmation" appendToBody="true">
    <p:commandButton value="Ja" oncomplete="bezoekConfirmation.hide()" action="#{bezoekenMobieleController.deleteBezoek}" ajax="false" />
         <p:commandButton value="Nee" onclick="bezoekConfirmation.hide()" type="button" />
    </p:confirmDialog>
    

    appendToBody="true" 会解决你的问题

    【讨论】:

      【解决方案3】:

      return false; 的解决方案仅在您不打算调用方法或设置变量时才有效。

      在这种情况下,只需使用oncomplete="dialog.show();" 而不是onclick="dialog.show();" 这将通过方法调用。


      例子:

      鉴于以下代码在某种数据表中,那么您可以拥有

      <p:commandButton value="edit" update=":dialog" oncomplete="dialog.show();">
       <f:setPropertyActionListener target="#{bean.field}" value="#{_item}" />
      </p:commandButton>
      

      或者直接调用setter

      <p:commandButton value="edit" update=":dialog" oncomplete="dialog.show();" action="bean.setField(_item)">
      </p:commandButton>
      

      【讨论】:

      • 2017,将 onclick 更改为 oncomplete 仍然是一个有效的答案,谢谢!
      猜你喜欢
      • 2016-04-24
      • 2011-09-30
      • 2012-09-25
      • 2014-04-28
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多