Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation 如果inputText验证失败或ajax调用启动,则停用commandButton功能_Validation_Jsf_Jsf 2_Primefaces - Fatal编程技术网

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呢?:)我担心,如果无效输入未禁用按钮,用户可能会提交无效请求。如果输入无效,我不希望按钮工作或提交任何内容。