PrimeFaces对话框出现后消失。

7

我有一个commandButton和一个dialog。问题在于,对话框出现后,它会在1-2毫秒后消失。这是我的commandButton有问题还是它的对话框有问题?

<p:commandButton id="showDetailsButton"
     title="Details"
     onclick="details.show();"
     process="@this"
     update=":tabView:myForm:myDialogId"                                         
     icon="ui-icon-search">                          
</p:commandButton>


<p:dialog id="myDialogId"
      header="Details"
      widgetVar="details"
      resizable="false"
      height="600"
      width="450"                  
      >
//some stuff
</p:dialog>

请阅读@BalusC对我的回答的评论。您需要在问题中提供更多细节! - Niks
3个回答

10

将 onclick 改为 oncomplete,现在它完美地运行。

<p:commandButton id="showDetailsButton"
 title="Details"
 oncomplete="details.show();"
 process="@this"
 update=":tabView:myForm:myDialogId"                                         
 icon="ui-icon-search">                          


3

默认情况下,<p:commandButton> 会呈现为

<button type="submit" ....> ... </button>
编辑: 如果您已经通过指定ajax=false禁用了ajax行为,请阅读下面的评论。
因此,它会触发一个 Post Back 。因此,您的页面将向服务器发出POST请求并刷新。
顺便说一句,这里不需要PrimeFaces commandButton,只需使用
<input type="button" onclick="details.show()" value="Details"/>

我认为原帖中的代码是不完整的。如果原帖使用了 ajax="false" 或者 update="someIdCoveringDialog" 等属性,那么对话框才会消失。然而,当前的代码并没有这样做。也许原帖忘记加上 <h:form> 了。这时浏览器的行为就是未指定的。 - BalusC
糟糕!@BalusC,你是对的。我错过了命令按钮的默认ajax行为。如果容器本身正在更新,则对话框将消失。因此,总体而言,我同意问题缺少细节! - Niks
他的问题中明显提到了更新(向右滚动 process="@this" update=":tabView:myForm:myDialogId")。 - roel

0

从你的命令按钮中删除这个进程并更新。它们会刷新页面/部分。而你不想要那样。


process 属性并不会做那件事,而且已经没有 update 属性了。 - BalusC
1
在他的代码片段中,我清楚地看到了一个更新语句:update=":tabView:myForm:myDialogId"(向右滚动) - roel
你说得对,@roel。我想他确实想要在单击时更新对话框的内容。也许他应该更新对话框内部的容器而不是对话框本身。 - Niks
多糟糕的代码片段,请编辑一下,这样我就可以撤销踩了。 - BalusC
毕竟,他显然想在显示对话框之前更新其内容(例如,显示当前选定的项目)。解决方案不是删除“更新”。此外,“process”属性根本不会刷新该部分。 - BalusC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接