p:commandButton 验证错误时不调用操作

p:commandButton doesn't call action on validation error

所以我有这个取消按钮:

<p:commandButton id="cancelButton" value="Cancel" action="#{myBean.doOnCancel}" onclick="dialogWidget.hide();" />

取消按钮所在的小部件 (<p:dialog>) 有一个日期字段。每次我打开对话框时,输入一些有效值并单击取消 - myBean.doOnCancel 被执行并且对话框被隐藏。 现在每次我打开对话框,输入一个无效的值,比如一个字母而不是日期,我会收到一条验证消息,说日期格式不正确,然后单击取消 - 对话框被隐藏但是操作中定义的方法(myBean.doOnCancel) 不执行。 知道为什么吗?

JSF 将根据规范在处理表单提交期间出现验证错误时不调用操作方法。 <p:commandButton> 默认处理整个表单,如 <p:commandButton process="@form"> 中一样。您只想将其限制为按钮本身。

<p:commandButton ... process="@this" />

对话框已成功隐藏,因为它是在提交表单之前完全在客户端执行的,与操作方法的结果无关。

另请参阅:

  • Understanding PrimeFaces process/update and JSF f:ajax execute/render attributes
  • How to skip validation when a specific button is clicked?