2010-08-03 2 views
5

Disons que j'ai sj: autocomplétion comme ceci:Struts2 JQuery comment faire onchange ajax

<sj:autocompleter id="idDistributor" 
name="idDistributor" 
list="%{idDistributorList}" label="ID 
Distributor" indicator="indicator" /> 

lorsque la valeur est changée, je voudrais passer la valeur de détail à un autre champ de texte comme celui-ci:

Où sa valeur sera récupérée à partir de haricots de retour de struts (FormAction)
<sj:textfield label="Nama Distributor" id="namaDistributor" name="namaDistributor" required="true"/> 

Comment est-ce que je pourrais faire ceci?

Vraiment merci d'avance.

Mr.K

Répondre

7

Le tableau suivant envoie la valeur autocomplétion à votre action et définir la valeur de #namaDistributor avec la chaîne retournée:

$('#idDistributor').change(function(){ 
    // Make the ajax request 
    $.ajax({ 
     url: 'path/to/back-bean.action', 
     data: "autocompleterValue=" + $(this).val(), 
     dataType: "json", 
     success: function(data) {  
      // Set the inputs from the json object    
      $('#namaDistributor').val(data.distributor); 
      $('#namaPrice').val(data.price); 
     } 
    }); 
}); 

Vous pouvez en savoir plus sur le $.ajax() method here. Le exemple ci-dessus JSON suppose que votre action crée un objet JSON avec le format suivant:

{"price": "123.40", "distributor": "XYZ Inc."} 

Vous pouvez en savoir plus sur l'utilisation de JSON avec Struts2 dans this article.

+0

Salut Pat, je voudrais pour passer la valeur du résultat de retour bean à #namaDistributor pas directement à partir de la valeur idDistributor, comment puis-je faire cela? Merci –

+0

Pas un problème. J'ai mis à jour le code pour montrer comment mettre à jour '# namaDistributor' à partir du résultat de l'appel ajax. – Pat

+0

Génial, ça marche ... avec peu de modification sur le bean back pour retourner le StreamResult et non String. Pat, désolé pour une autre question, si je veux modifier plusieurs champs de texte après autocompleter onchange, comment puis-je faire cela ?, sur l'autre mot, je dois retourner deux valeurs pour deux champs différents. Merci. –

2

vous pouvez le faire avec onSelectTopics.

Abonnez-vous un sujet comme celui-ci:

<script> 
$.subscribe('autocompleteSelect', function(event, data) { 
    var ui = event.originalEvent.ui; 
    $('#namaDistributor').val(ui.item.value); 
}); 
</script> 

et à à votre autocomplétion

<sj:autocompleter id="idDistributor" 
name="idDistributor" onSelectTopics="autocompleteSelect" 
list="%{idDistributorList}" label="ID 
Distributor" indicator="indicator" /> 

vous pouvez trouver un exemple pour cela dans le Struts2 jQuery Plugin Showcase

+0

merci pour la perspicacité. –

Questions connexes