Validation 如果inputText验证失败或ajax调用启动,则停用commandButton功能
我在表单中有以下代码:Validation 如果inputText验证失败或ajax调用启动,则停用commandButton功能,validation,jsf,jsf-2,primefaces,Validation,Jsf,Jsf 2,Primefaces,我在表单中有以下代码: <p:panel id="panel" header="lalalala"> <h:panelGrid columns="5"> <h:outputLabel value="Enter name" for="name" /> <p:inputText id="name" value="#{userBean.name}" required="true" label=
<p:panel id="panel" header="lalalala">
<h:panelGrid columns="5">
<h:outputLabel value="Enter name" for="name" />
<p:inputText id="name" value="#{userBean.name}"
required="true" label="name" maxlength="15"
validatorMessage="oops"
requiredMessage="ooopps">
<f:validateRegex
pattern="^somepattern$">
</f:validateRegex>
<p:ajax event="blur" update="inputValidationMessage" />
</p:inputText>
<p:message id="inputValidationMessage" showSummary="false"
for="name" />
<p:watermark for="name" value="eg. John" />
</h:panelGrid>
<p:commandButton id="submitButton" value="Submit" update="panel"
actionListener="#{userBean.save}"
onclick="handleOnclick"
oncomplete="handleAjaxResponse(xhr, status, args)">
</p:commandButton>
<p:messages autoUpdate="true" globalOnly="true" showDetail="true" />
</p:panel>
因此,验证消息在inputText
元素上运行良好。但是,即使输入无效,单击submit按钮仍会发出Ajax请求。我希望在inputText有效时发送Ajax请求
我该怎么做
此外;还有一种情况,我想关闭按钮。在这种情况下,inputText被验证,用户单击按钮。这样做的原因是,我不希望用户错误地泛滥请求。(即反复按下提交按钮)
目前,handleOnclick
javascript函数只显示一个模式对话框,上面写着“等待”。由于该对话框是模态对话框,因此无法访问背景。但是,这仍然不能阻止用户重复按它,因为onclick和模态对话框显示之间经过了1秒。此外;这种方法不能阻止提交无效数据。你有什么建议
我使用JSF2.0和PrimeFaces3.0
感谢您的帮助。您可以使用按钮的
disabled
属性。只要将其设置为true
,无论何时返回false
(因此,这是一个初始请求),还是true
(因此,发生了表单提交),然后检查是否返回true
(因此验证通常失败)
您只需要确保在ajax请求上更新按钮,以便在必要时重新显示启用或禁用的按钮
谢谢你的回答,巴卢斯克。您建议的功能正常,但用户体验不好。当我加载页面并在inputText中输入一些有效文本时,commandButton不会立即启用。由于它在页面加载时被禁用,在输入有效内容后,我必须单击页面上的其他位置,以便触发模糊事件并启用按钮。只有这样我才能点击按钮。但是,这可能会导致糟糕的用户体验。我该怎么处理呢?所以只有一个输入字段?我知道您有多个需要验证的输入字段。您只需删除{facesContext.postback}
检查即可。因此,我现在只禁用了项=“#{facesContext.validationFailed}”
。这解决了我提到的问题,但当验证失败时也会发生同样的事情。我加载页面,输入无效内容,按钮被禁用。然后,我输入了一些有效的内容,但必须单击其他地方才能再次启用该按钮。只有这样我才能点击按钮。在这种情况下,您有什么建议可以防止糟糕的用户体验?您可以使用keyup
而不是blur
,但这会导致更多ajax请求。或者,完全不要禁用按钮:)我可以告诉JSF在客户端进行这些验证吗?为什么它是Ajax呢?:)我担心,如果无效输入未禁用按钮,用户可能会提交无效请求。如果输入无效,我不希望按钮工作或提交任何内容。