cob*_*uck 7 jsf autocomplete primefaces 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>
Run Code Online (Sandbox Code Playgroud)
然后是Java支持bean代码:
public void idChangeEventListener() {
myBean = myDAO.getDetails(myBean);
// another couple of init-type method calls
}
Run Code Online (Sandbox Code Playgroud)
cob*_*uck 10
为父标记赋予widgetVar属性,然后将此little属性添加到<p:ajax event="change" ...>子标记:
onstart="if(widgetVarName.panel.is(':visible')) return false;"
Run Code Online (Sandbox Code Playgroud)
当问题写好时,如果我没记错的话,我们在PrimeFaces 3.5版本上.从那时起,我们需要将解决方案更新为:
onstart="if(PF('widgetVarName').panel.is(':visible')) return false;"
Run Code Online (Sandbox Code Playgroud)
感谢mwalter指出了变化.
| 归档时间: |
|
| 查看次数: |
17453 次 |
| 最近记录: |