IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 2 Java Discussion :

Probleme autocompleter et json


Sujet :

Struts 2 Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 47
    Par défaut Probleme autocompleter et json
    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;
    	}
     
    }

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Par défaut
    Bonjour,

    Depuis le temps je pense que vous avez résolu votre problème ... Actuellement j'ai aussi quelques problème avec<sx:autocompleter />. Impossible de le faire fonctionner. Je crois que j'ai épuiser les exemple sur le net donc si quelqu'un peut m'aider ?

    Merci d'avance pour votre aide
    Voilà mes sources:

    Ma 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
    15
    16
    17
    18
    19
    20
     
    <?xml version="1.0" encoding="UTF-8" ?>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    	<title>Test</title>
        <sx:head/>
    </head>
    <body>
     
    <s:url id="cityList" namespace="/autocompleter" action="getStates" />
        <sx:autocompleter href="%{#cityList}" />
     
    </body>
    </html>
    Mon fichier struts.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	<package name="autocompleter" namespace="/autocompleter" extends="json-default">  
        	<action name="getStates" class="fr.actions.JSONAction" >  
          		<result type="json">
                   <param name="root">states</param></result>
            </action>  
     
        </package>
    Mon 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
     
    package fr.actions;
     
    import java.util.HashMap;
    import java.util.Map;
     
    import com.opensymphony.xwork2.Action;
    import com.opensymphony.xwork2.ActionSupport;
     
    public class JSONAction extends ActionSupport{
    		private Map<String, String> states;
     
    		public Map<String, String> getStates() {
         	                Map<String,String> states = new HashMap<String,String>();
         	                states.put("Florida", "FL");
         	                states.put("Alabama", "AL");
       		        return states;
    		}
     
    		public void setStates(Map<String, String> states) {
    			this.states = states;
    		}
     
    		public String execute() throws Exception{
    	                return SUCCESS;
    	        }
     
     
    }

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Par défaut
    J'ai un peu avancé ... en faite je vien de voir dans les logs cette ligne :

    GRAVE: Unable to find parent packages json-default

    Cependant j'ai bien la librairie "json-lib-2.1" qui est inclus à mon projet quelqu'un à une idée ?

Discussions similaires

  1. django probleme autocompletion
    Par pat100 dans le forum Django
    Réponses: 0
    Dernier message: 14/06/2013, 14h07
  2. [Débutant] probleme avec newtonsoft.json.dll
    Par marooh dans le forum Visual Studio
    Réponses: 1
    Dernier message: 24/07/2012, 15h05
  3. [Autocomplete et Json store] problème avec Autocomplete
    Par leo_OrNg dans le forum Ext JS / Sencha
    Réponses: 1
    Dernier message: 11/04/2011, 14h23
  4. [AJAX] autocomplete + url
    Par amza66 dans le forum AJAX
    Réponses: 0
    Dernier message: 26/05/2010, 20h52
  5. Probleme autocompletion, page qui descend
    Par Lafab dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 16/07/2008, 14h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo