Primefaces对话框中的commandButton仅在后续点击时触发操作

时间:2015-11-20 12:53:14

标签: primefaces modal-dialog commandbutton

我在dialog Primefaces actionListenercommandButton上遇到了一些问题。

提供一些背景知识:
我维护的应用程序目前使用旧版本的 ICEfaces 。我的任务是找出是否用当前版本的 Primefaces 替换它(我目前正在使用 5.2.6 )将提供好处速度/反应时间以及我们需要做的事情,以取代框架。我们必须以最少的工作量完成这项工作,因此重建所有弹出窗口是不可能的。

现在,针对手头的问题:
我试图用ace:dialog替换旧的p:dialog,到目前为止,只需更换标签即可。对话框的工作方式与以前一样,但我对h:commandButton有一个奇怪的问题 我选择了一个用于显示错误消息的弹出窗口,用于处理概念验证。我知道其他弹出窗口遇到了同样的问题。这是弹出窗口的代码,我将其剥离为必需品。

<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.org/ui">
<p:dialog id="ErrorPopupID" widgetVar="panelPopupErrorWidget" 
    position="center" modal="true" resizable="false" draggable="false" 
    closeOnEscape="false" header="Errors"
    visible="#{errorPopupBean.renderErrorPopup}">
        <h:panelGroup style="width:320px;">
            <div style="height:218px;padding:5px;">
                <h:outputText escape="false" value="Error text"/>
            </div>
                <h:form>
                <div style="padding-left:5px;">
                    <h:commandButton id="errorPopupCloseButton"
                     value="Close"
                     actionListener="#{errorPopupBean.closeErrorPopup}"/>
                </div>
            </h:form>
        </h:panelGroup>
</p:dialog>

正如您所看到的,弹出窗口中包含一个按钮,该按钮基本上只是关闭弹出窗口并清除消息列表。由于我无法弄清楚的原因,只有当我再次单击该按钮时才会触发该操作。当我第一次点击它时,从用户的角度来看似乎没有任何事情发生 我碰巧有PhaseListener,所以我知道在第一次点击时,请求被发送到服务器,但只执行生命周期的第1和第6阶段。只有在第二次单击时,才会处理整个生命周期 - 包括INVOKE_APPLICATION - 并触发操作。但我无法弄清楚原因。

以下是我没有成功的尝试:

  • h:commandButton替换为p:commandButton
  • 尝试了h:form(最初在p:dialog之外)
  • 的不同嵌套
  • 直接在ui:include
  • 前面移动了弹出窗口</h:body>
  • FULL
  • 尝试了PARTIALprimefaces.SUBMIT
  • 以上所有的各种变化
  • 编辑:我还尝试了三种不同版本的 Primefaces 4.0.10 5.0.10 除了我实际使用的 5.2.6 之外,只是为了看看这个特定版本的PF是否是一个小故障。

我在这里不知所措,不知道还有什么可以尝试。它适用于 ICEfaces ,所以我认为它也必须与 Primefaces 一起使用。
我也在这里检查了其他问题,但是他们要么处理不同的情况,要么p:dialog根本不工作。我的工作,但不完全正确。

1 个答案:

答案 0 :(得分:0)

您可以尝试 p :commandButton,其属性为 ajax =&#34; false&#34;