我需要在更改为文本框时触发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>
public void idChangeEventListener() { myBean = myDAO.getDetails(myBean); // another couple of init-type method calls }
解决方法
原文地址:https://www.jb51.cc/js/150605.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。