我在dialog
的 Primefaces actionListener
和commandButton
上遇到了一些问题。
提供一些背景知识:
我维护的应用程序目前使用旧版本的 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
PARTIAL
和primefaces.SUBMIT
我在这里不知所措,不知道还有什么可以尝试。它适用于 ICEfaces ,所以我认为它也必须与 Primefaces 一起使用。
我也在这里检查了其他问题,但是他们要么处理不同的情况,要么p:dialog
根本不工作。我的工作,但不完全正确。
答案 0 :(得分:0)
您可以尝试 p :commandButton,其属性为 ajax =&#34; false&#34; 。