2012-01-21 64 views
0

我在<h:form>中有输入字段和命令按钮。输入字段是必需的,如果输入了无效的内容,验证错误信息就会显示出来。在窗体的末尾,我有以下按钮:即使输入无效,Ajax回调onstart也能正常工作

<p:commandButton value="" ajax="true" update="foormm" 
    icon="ui-icon-check" actionListener="#{bean.sayHello}" 
    onstart="dialog.show()" 
    oncomplete="handleAjaxResponse(xhr, status, args)"> 
</p:commandButton> 

问题是,对话框显示与验证无关。我认为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条件取决于您在行动设置一些bean属性(听众?)方法:

<p:dialog id="dialog" visible="#{bean.saidHello}"> 
相关问题