Bonjour,

j'essaye d'utiliser la dernière version de Struts 2 qui est la 2.1.6.
Je souhaite faire fonctionner l'autocomplete dynamique via struts2-dojo.
Je parviens bien à ce que le mécanisme d'autocomplete fonctionne mais je rencontre malgré tout le problème suivant :
- Lorsque je tape des caractères dans mon champs autocomplete, l'action correspondante est bien appelée et ma liste peuplée via un objet DAO (j'arrive à la voir en debug). Par contre, la combo affichée par autocompleter est "décalée" par rapport au filtre de recherche que je lui fourni. Si par exemple j'entre "CONF" dans mon champs autocomplete, le DAO récupère bien tous les enregistrements qui contiennent "CONF" mais la combo s'affiche avant l'obtention du résultat et me donne un liste de valeur qui contiennent "CON".
Si ensuite j'efface le caractère "F" et le retape, la combo est bien mise à jour.
Est-ce que quelqu'un a déjà rencontré ce pb et l'a-t-il résolu ?
En vous remerciant par avance.
PS: Je fourni ci-dessous le code :

struts.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
	<package name="ajax" extends="json-default">
		<action name="autocompleteClient" class="com.soc.action.ajax.AutoCompleteClientAction">
			<result type="json" />
		</action>
	</package>
la jsp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<s:url id="listeClientsLien" action="autocompleteClient" method="peuplerListeClients" />
 
<sx:autocompleter 
	name="filtreClient"
	dataFieldName="listeClients"
	href="%{listeClientsLien}"
 	indicator="clientIMG" 
 	cssClass="width80px" 
 	dropdownWidth="300"
 	dropdownHeight="200" preload="false" 
 	forceValidOption="true"
 	loadMinimumCount="4"
 	loadOnTextChange="true" 
 	tooltip="%{getText('tooltips.client')}" />
et enfin, l'action
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package com.soc.action.ajax;
 
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
 
import javax.servlet.http.HttpServletRequest;
 
import org.apache.struts2.interceptor.ServletRequestAware;
 
import com.soc.dao.DAOTable;
import com.soc.modele.Table2;
import com.opensymphony.xwork2.ActionSupport;
 
public class AutoCompleteClientAction extends ActionSupport implements ServletRequestAware {
 
	private String filtreClient;
	private HttpServletRequest request;
 
	private Map<String, String> listeClients;
	/**
         * 
         */
	private static final long serialVersionUID = 3766486835244037938L;
 
	public String execute() throws Exception {
		return SUCCESS;
	}
 
	public String peuplerListeClients() throws Exception {
		listeClients = new HashMap<String, String>();
		if (filtreClient != null && filtreClient.length() > 0) {
 
			String societe = (String) request.getSession().getAttribute("company");
			List<?> clients = DAOTable.getListeFiltree(societe, filtreClient);
 
			for (Iterator<?> iter = clients.iterator(); iter.hasNext();) {
				Object resultat = iter.next();
				listeClients.put(getLibResultat(resultat), getValeurResultat(resultat));
			}
		}
		return SUCCESS;
	}
 
	public Map<String, String> getListeClients() {
		return listeClients;
	}
 
	@Override
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}
 
	/**
         * @param resultat
         * @return libellé résultat
         */
	private String getLibResultat(Object resultat) {
		Table2 tie = (Table2) resultat;
		return tie.getLib().trim().replaceAll("&", "?") 
		+ " (" + tie.getNum().toString()	+ ")";	
	}
 
	/**
         * @param resultat
         * @return valeur résultat
         */
	private String getValeurResultat(Object resultat) {
		Table2 tie = (Table2) resultat;
		return tie.getNum().toString();
	}
 
 
	public void setFiltreClient(String filtreClient) {
		this.filtreClient = filtreClient;
	}
 
}