web-dev-qa-db-fra.com

Capture d'événement de modification <p: autoComplete> primefaces (détection de la vidange)

j'ai une question concernant une saisie semi-automatique Primefaces. Maintenant, je mets à jour un champ avec la valeur d'une propriété de la valeur sélectionnée dans la saisie semi-automatique, comme ceci:

C'est dans mon 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>    

Et voici mon Backing Bean:

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

Cela fonctionne, mais maintenant j'essaie de mettre à jour le outputText avec l'ID "text" avec une chaîne vide lorsque la valeur de la saisie semi-automatique est vide.

Comment puis-je capturer l'événement déclenché lorsque p:autoComplete est vidé?

12
Katxopo

Primefaces autoComplete génère 2 événements: "change" et "itemSelect", pour 2 méthodes pour changer son contenu: taper ou sélectionner dans la liste déroulante. Vous devez donc enregistrer 2 p:ajax auditeurs:

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

Vous aurez également besoin de la deuxième signature de méthode du serveur:

public void action(AjaxBehaviorEvent event)

pour capturer l'événement "change".

Au lieu de event, vous pouvez utiliser l'attribut onstart avec JavaScript pour exécuter ... Plus d'options pour p:ajax vous trouverez dans Primefaces Users Guide, section "AjaxBehavior".

25
Danubian Sailor