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?
所以我有这个取消按钮:
<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?