加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PrimeFaces inputText ajax event = valueChange在单击commandBu

发布时间:2020-12-16 02:51:46 所属栏目:百科 来源:网络整理
导读:使用JSF和PrimeFaces 6.1我有一个inputText字段: p:inputText value="#{backingBean.stringField}" p:ajax event="valueChange" update="@form" //p:inputText 在同一个表单中是一个commandButton: p:commandButton id="btnDoThatThing" ajax="true" immed
使用JSF和PrimeFaces 6.1我有一个inputText字段:

<p:inputText value="#{backingBean.stringField}">
    <p:ajax event="valueChange" update="@form" />
</p:inputText>

在同一个表单中是一个commandButton:

<p:commandButton id="btnDoThatThing" 
                 ajax="true" 
                 immediate="true"
                 update="@form"
                 process="@this"
                 action="#{backingBean.doThatThing}"/>

当我

>对inputText字段进行更改,
>然后单击命令按钮以外的其他位置
>单击命令按钮

一切都按预期完成.但如果我:

>对inputText字段进行更改,
>立即执行命令按钮

因为第一次单击commandButton而触发valueChange事件发生在inputText字段中,所以不会触发该按钮.

如果我第二次点击它,按钮动作终于发生了.

现在,如果我将p:ajax event =“valueChange”更改为p:ajax event =“keyup”,commandButton的第一次单击按预期工作,但不幸的是,inputField上的keyup事件非常hacky并且你在字段(复制/粘贴文本,文本选择,’快速’键入’等)

有关如何在inputText字段中启动change事件的任何想法,当用户在inputText字段中输入时立即单击按钮时,触发commandButton操作?

谢谢你的时间!

解决方法

首先触发valueChange.这会更新包含按钮的表单.不是100%确定这是否依赖于浏览器,但在Chromium(Linux)中,不执行单击先前渲染的按钮(在更新之前).

当我将更新表达式更改为selector时,我可以使它工作.我的表达式更新了我需要更新的元素,不包括按钮.就我而言:

<p:ajax update="@(form :input:not(button))" />

请注意,更改事件是输入的默认值,因此我删除了event =“valueChange”.

当然,您不需要使用选择器.您还可以只更新不包含按钮的组件(如面板):

<p:ajax update="yourPanel" />

此外,ajax =“true”是p:commandButton的默认值,因此您可以删除它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读