jsf - PrimeFaces 自动完成 : itemSelect versus change events

标签 jsf primefaces autocomplete dom-events

我需要在更改文本框时触发 ajax 更新,这是一个 <p:autoComplete>成分。我观察到,如果用户选择手动键入文本,则事件是更改,而如果用户单击自动完成建议之一,则事件是 itemSelect。所以我加了两个 <p:ajax>输入的子项,每个子项都调用相同的方法并具有相同的更新列表,但其中一个具有 event="change"和另一个 event="itemSelect" .

然而,我现在发现了一些奇怪的东西。例如,在正常服务器模式下,我打开页面并输入“12”。自动完成提供“1233”和“1234”作为建议。我点击了“1233”,似乎什么也没发生。我再次点击并填写了其他所有内容。

在调试器中用事件处理程序上的断点重复此操作,我可以看到第一次单击后,值为“12”,第二次单击时,它变为“1233”。

通过切换注释掉两个不同的 <p:ajax>我可以看到不同的后果。如果没有“更改”选项,则在用户选择自动完成建议时永远不会调用处理程序;如果没有“itemSelect”选项,则在用户手动输入时永远不会调用处理程序。但是对于他们两个,有两个调用,我肯定会有关于双击的提示。

一些喜欢的人的伪代码,首先是 xhtml:

<p:autoComplete id="itemId" value="#{myBacker.myBean.itemNumber}"
    required="true" completeMethod="#{myBacker.idAutoComplete}">
    <p:ajax event="itemSelect" update="beanDetails"
        listener="#{myBacker.idChangeEventListener()}" />
    <p:ajax event="change" update="beanDetails"
        listener="#{myBacker.idChangeEventListener()}" />
</p:autoComplete>
<h:panelGroup id="beanDetails">
    <h:panelGroup rendered="#{not empty myBacker.myBean.institutionName}">
        <h:outputText value="#{myBacker.myBean.institutionName}" />
        <!-- Continues with address, phone, etc..  -->
    </h:panelGroup>
</h:panelGroup>

然后是 Java 支持 bean 代码:
public void idChangeEventListener() {
    myBean = myDAO.getDetails(myBean);
    //  another couple of init-type method calls
}

最佳答案

给父标签一个widgetVar 属性,然后将这个小属性添加到<p:ajax event="change" ...>子标签:

onstart="if(widgetVarName.panel.is(':visible')) return false;" 

写这个问题时,如果我没记错的话,我们使用的是 PrimeFaces 3.5 版。从那时起,我们需要将解决方案更新为:
onstart="if(PF('widgetVarName').panel.is(':visible')) return false;"

感谢 mwalter 指出变化。

关于jsf - PrimeFaces 自动完成 : itemSelect versus change events,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18618684/

相关文章:

jsf - 覆盖 PrimeFaces 的 MediaRenderer

html - 如何在每行 p :dataScroller 上显示两条记录

java - JSF2.0 - 使用 Primefaces 3.0 处理错误的 Ajax 调用

javascript - 如何关闭对 html 输入的浏览器建议

javascript - AngularJS:为什么我不能使用箭头键从文本框中选择自动完成列表?

android - 触发 *select* jQuery 事件后在手机上隐藏键盘

java - 将用户名和密码从 JSF 或 JSP 传递到 Oracle Reports

jsf - JSF flash keepMessages 属性是否持续存在?

jsf - 根据另一个输入组件的值禁用/启用 JSF 输入组件

html - Primefaces south 布局单元问题