所以我有了这个取消按钮:
<p:commandButton id="cancelButton" value="Cancel" action="#{myBean.doOnCancel}" onclick="dialogWidget.hide();" />
取消按钮所在的小部件(<p:dialog>
)有一个日期字段。每次我打开对话框,输入一些有效值并单击取消- myBean.doOnCancel
被执行,对话框被隐藏。现在每次我打开对话框,输入一个无效的值,比如一个字母代替日期,我得到一个验证消息说日期格式不好,然后单击取消-对话框被隐藏,但在行动(myBean.doOnCancel
)中定义的方法没有执行。知道为什么吗?
按照规范,当处理表单提交过程中出现验证错误时,JSF将不会调用action方法。默认情况下,<p:commandButton>
处理整个表单,如<p:commandButton process="@form">
所示。您只需要将其限制为按钮本身。
<p:commandButton ... process="@this" />
对话框被成功隐藏,因为它完全是在提交表单之前在客户端执行的,独立于action方法的结果。
参见:
- 了解PrimeFaces process/update和JSF f:ajax execute/render属性
- 如何跳过验证时,一个特定的按钮被点击?