Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Capturing primefaces <p:autoComplete> change event (detect emptying)

i got a question concerning an Primefaces autocomplete. Rigth now i am updating a field with the value of a property of the selected value in the autocomplete, like this:

This is in my xhtml:

<p:autoComplete
    value="#{trFitoModel.selectedProducte}"
    id="nomComercial"
    completeMethod="#{trFitoBacking.completeProducte}"
    var="producte" itemLabel="#{producte.nom}"
    itemValue="#{producte}" converter="#{ProducteFitoConverter}"
    forceSelection="true"
    onkeyup="this.value = this.value.toUpperCase();">
    <p:ajax event="itemSelect"
        listener="#{trFitoBacking.handleSelect}"
        update="text" global="false" />
    <f:validator validatorId="qea.validators.EmptyFieldValidator" />
    <f:attribute name="validationTitle" value=" NomComercial " />
</p:autoComplete>
</p:column>
<p:column>
    <h:outputLabel>#{msgI18N.trFito}</h:outputLabel>
    <h:outputText id="text"
        value="#{traFitoBacking.resgistre}">
    </h:outputText>
</p:column>    

And this is my Backing Bean:

 public void handleSelect(SelectEvent event) {
    ProducteFitosanitari p=(ProducteFitosanitari)event.getObject();
    setResgistre(Integer.toString(p.getNumRegistre()));
}

This works, but now I'm trying to update the outputText with id "text" with an empty String when the value of the autocomplete is empty.

How can I capture the event triggered when p:autoComplete is emptied?

like image 365
Katxopo Avatar asked Mar 25 '14 12:03

Katxopo


1 Answers

Primefaces autoComplete generates 2 events: "change" and "itemSelect", for 2 methods of changing its content: typing or selecting from dropdown list. So you need to register 2 p:ajax listeners:

<p:autoComplete ... >
    <p:ajax event="itemSelect" listener="#{bean.action}" process="@form"/> 
    <p:ajax event="change" listener="#{bean.action}" process="@form"/> 
</p:autoComplete>    

You'll need also 2nd server method signature:

public void action(AjaxBehaviorEvent event)

for capturing 'change' event.

Instead of event you can use onstart attribute with JavaScript to run... More options for p:ajax you'll find in Primefaces Users Guide, section "AjaxBehavior".

like image 100
Danubian Sailor Avatar answered Sep 17 '22 12:09

Danubian Sailor