jsf - PrimeFaces autocomplete: itemSelect versus change events -
i need trigger ajax update upon change text box, <p:autocomplete> component. have observed if user opts type text manually, event change, whereas if user clicks 1 of suggestions autocomplete, event itemselect. added 2 <p:ajax> children input, each calling same method , having same update list, 1 having event="change" , other event="itemselect".
however, discover odd. example, while in normal server mode opened page , typed "12". autocomplete offered "1233" , "1234" suggestions. clicked "1233" , seemingly nothing happened. clicked again , else filled in.
repeat in debugger breakpoint on event handler, , can see after first click, value "12" , on second click, becomes "1233".
by switching commenting out 2 different <p:ajax> can see different consequences. without "change" one, handler never called if user selects autocomplete suggestion, , without "itemselect" one, handler never called if user types manually. both of them, there 2 calls, , i'm sure there complaints double-click.
some pseudo-code like, first 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 address, phone, etc.. --> </h:panelgroup> </h:panelgroup> then java backing bean code:
public void idchangeeventlistener() { mybean = mydao.getdetails(mybean); // couple of init-type method calls }
give parent tag widgetvar attribute, add little attribute <p:ajax event="change" ...> child tag:
onstart="if(widgetvarname.panel.is(':visible')) return false;" when question written, on primefaces version 3.5, if recall correctly. since then, need update solution to:
onstart="if(pf('widgetvarname').panel.is(':visible')) return false;" with mwalter pointing out change.
Comments
Post a Comment