当前位置: 首页 > 知识库问答 >
问题:

禁用立即操作的验证

董霖
2023-03-14

我有一个包含p:commandButton的复杂页面,该页面带有actionListener和immediate=“true”

单击此commandButton后,我需要处理单个inputField(因此跳过表单的其余部分)。问题是,inputfield有一个验证器,我只想在整页提交中使用它。

<p:inputText id="#{cc.attr.id2}_input" value="#{myBB.value}" 
                 immediate="true">
    <f:validateLength minimum="4"/>
</p:inputText>

<p:commandButton id="#{cc.attr.id2}_search" immediate="true" 
     process="#{cc.attr.id2}_input @this"
     actionListener="#{myBB.listener}">
</p:commandButton>

当我在inputText中使用3个字母执行此操作时,由于验证失败,mybb.value不会更新。因此,我想禁用inputField的验证器,以便CommandButton立即进行处理。但我不知道怎么做。

我知道我可以从externalcontext中获取值,但这对我来说似乎是一个非常糟糕的解决方案(在我的情况下甚至不适用,因为它在复合组件中,我无法知道TextField的clientId。)我还知道validator标记的disabled属性,但我不知道如何在这种情况下使用它。

编辑:我修改了一段代码,因为我使用的ID实际上不像我第一次声明的那么简单,不允许我使用简单的建议解决方案。

我使用Mojarra 2.2.4和Primefaces 4.0

共有1个答案

彭琛
2023-03-14

因此,首先,immediate没有问题,而是 验证器。

也就是说,为了重新表述您的问题,您希望在单击特定按钮的情况下跳过对给定组件的验证。

根据您是否使用Mojarra2.1.18+,有两种解决方案。第一个非常简单:使用 的disabled属性,而另一个则考虑了问题1492。由于我们现在已经超过了前面提到的Mojarra版本,我将发布第一个更简单的解决方案,否则,滚动浏览关于f:validatedoublerange为什么只适用于@sessionscoped的出色答案? 的Disabled属性不通过balusc计算请求参数。

<h:form id="formId">
    <p:inputText id="inputId" value="#{myBB.value}">
        <f:validateLength minimum="4" disabled=#{not empty param['formId:buttonId']}" />
    </p:inputText>
    <p:commandButton id="button" process="@this inputId" actionListener="#{myBB.listener}" />
</h:form>

作为附带说明,您可以看到我根本没有使用immediate属性,因为我假设您滥用了它来执行给定的任务。随着AJAX的兴起,特别是在基于JSF的应用程序中,您现在可以通过指定 process属性来轻松地分组输入元素验证的子集,而不是以前使用的优先级验证,特别是在同步请求中。只有那些提供了ID的组件才会在服务器上处理,而所有其他组件都将被省略prom处理生命周期。还要注意,process=“@this...”也是强制执行与按钮itseld相关联的操作的。

关于immediate的适当用法,我强烈建议参考经典:BalusC的Debug JSF lifecycle blog post以检查您是否正确使用了它。

 类似资料:
  • 问题内容: 我需要在Jenkins上禁用“立即构建”选项,我的工作是构建分支并将SNAPSHOT部署到服务器。我需要使用Maven版本的生产作业,该作业只能生成稳定的版本,但是对于此作业,我认为最好的方法是禁用“立即构建”选项并仅使用Maven版本。那我可以这样做吗? 问题答案: 使用授权策略插件禁止运行作业。如果配置正确- 没有人会看到“立即构建”按钮。另一个选择是Job Restriction

  • 问题内容: 基本上,这是带有GUI的客户端程序,因此我想在用户关闭客户端程序时关闭套接字。是否有监听器或其他可以让我执行此操作的东西? 问题答案: 请注意, 只有 在通过(x)按钮关闭框架 之前 将默认关闭操作设置为默认关闭操作时, 才会 调用此方法。默认值为技术上不会关闭窗口的默认值,因此不会通知侦听器。

  • 问题内容: 我有一个非常轻量级的作业,应在触发后立即执行,而不是等待一个小时才能完成当前作业。 据我了解,一项 轻量级 任务就是我想要的。它将为该任务创建一个临时执行程序。 我怎样才能使工作成为举重运动员? 问题答案: 试试这个FlyWeightProject插件。它是在Flyweight中运行的Freestyle类型的扩展。

  • 问题内容: 在使用FirefoxDriver编写测试时, 我发现由于执行javascript和CSS,页面的加载真的很慢。反正有禁用此功能吗?甚至可以将Noscript插件安装到配置文件? 另外,sendKeys()实际上输入了文本。但是,对于长文本来说,这相当慢,无论如何要立即在输入框中输入所有字符串? 问题答案: 您可以在中禁用javaScript : 我不认为有一种禁用CSS的方法,这不是您

  • 我想执行group_by,并使用dplyr对数据帧进行字符串操作 我希望输出(newdf)如下所示: 我在dplyr中尝试了以下方法 还尝试了以下方法: 我可以用基本的数据帧操作。在理解dplyr中的出路时需要帮助。

  • 这是我用来立即激发job的代码: