我在<h:form>
内有输入字段和命令按钮。输入字段是必需的,如果输入了无效内容,则验证错误消息将显示良好。在表单的最后,我有以下按钮:
<p:commandButton value="" ajax="true" update="foormm"
icon="ui-icon-check" actionListener="#{bean.sayHello}"
onstart="dialog.show()"
oncomplete="handleAjaxResponse(xhr, status, args)">
</p:commandButton>
问题是,无论验证如何,对话框都会显示。我认为如果验证了iff输入,则会发出Ajax请求。这有什么不对?即使必填字段为空,为什么onstart
会被触发?
我在Eclipse中使用JSF 2.0,Primefaces 3.0和Weblogic 12.1。
任何帮助表示感谢。
答案 0 :(得分:1)
换句话说,只有在回发后没有发生验证错误时才要显示对话框? onstart
根本没有考虑到这一点。它是在调用ajax回发之前调用的。
你需要采用不同的方法。 <p:dialog>
具有visible
属性,可以将EL表达式评估为boolean
结果。你可以利用它:
<p:dialog id="dialog" visible="#{some condition}">
#{some condition}
最简单的可以是FacesContext#isPostback()
和FacesContext#isValidationFalied()
的组合。因此,如果它是回发并且验证没有失败,那么对话框应该是可见的。
<p:dialog id="dialog" visible="#{facesContext.postback and not facesContext.validationFailed}">
您只需让按钮更新该对话框:
<p:commandButton value="" ajax="true" update="foormm dialog"
icon="ui-icon-check" actionListener="#{bean.sayHello}"
oncomplete="handleAjaxResponse(xhr, status, args)">
</p:commandButton>
或者,您也可以让对话框的visible
条件依赖于您在action(listener?)方法中设置的某些bean属性:
<p:dialog id="dialog" visible="#{bean.saidHello}">